packages feed

dfinity-radix-tree 0.5.2 → 0.6.0

raw patch · 46 files changed

+2407/−3334 lines, 46 filesdep +clockdep +cryptonitedep +memorydep −blake2dep −bloomfilterdep −cmdargsnew-component:exe:dfinity-radix-tree-examplebinary-added

Dependencies added: clock, cryptonite, memory

Dependencies removed: blake2, bloomfilter, cmdargs, criterion, ghc-prim, lmdb-simple, semigroups, stm

Files

+ ._CHANGELOG.md view

binary file changed (absent → 176 bytes)

+ ._LICENSE view

binary file changed (absent → 227 bytes)

+ ._README.md view

binary file changed (absent → 176 bytes)

+ ._dfinity-radix-tree.cabal view

binary file changed (absent → 176 bytes)

− .travis.yml
@@ -1,11 +0,0 @@-language: haskell--addons:-  apt:-    packages:-    - libleveldb-dev-    - liblmdb-dev--ghc:-  - 8.2-  - 8.4
CHANGELOG.md view
@@ -1,3 +1,10 @@+0.6.0 Enzo Haussecker <enzo@dfinity.org> Wed Mar 13 2019++ * Update license agreement.+ * Remove bloom filter dependency.+ * Implement radix subtree construction.+ * Improve debug output.+ 0.5.2 Enzo Haussecker <enzo@dfinity.org> Fri Oct 19 2018   * Fix bug related to search strategy.
LICENSE view
@@ -1,674 +1,26 @@-              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.+Copyright (c) 2018-2019, DFINITY Stiftung. All rights reserved. -  If the program does terminal interaction, make it output a short-notice like this when it starts in an interactive mode:+Redistribution and use in source and binary forms, with or without modification,+are permitted provided that the following conditions are met: -    <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.+(1) Redistributions of source code must retain the above copyright notice, this+list of conditions and the following disclaimer. -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".+(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. -  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/>.+(3) Neither the name of the DFINITY Stiftung nor the names of its contributors+may be used to endorse or promote products derived from this software without+specific prior written permission. -  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>.+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 DFINITY STIFTUNG BE LIABLE FOR ANY DIRECT,+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,+BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
README.md view
@@ -1,10 +1,9 @@ # dfinity-radix-tree: A generic data integrity layer.  [![DFINITY][dfinity-shield]][dfinity]-[![Build Status][build-shield]][build] [![Hackage][hackage-shield]][hackage] [![Dependencies][deps-shield]][deps]-[![License: GPLv3][license-shield]][license]+[![License: BSD 3-Clause][license-shield]][license]  ## Overview @@ -16,9 +15,8 @@  ## Usage -Define your database as an instance of the [`RadixDatabase`][] type class.-Instances for [LevelDB][hackage-leveldb-haskell] and [LMDB][hackage-lmdb-simple]-are already provided.+Define your database as an instance of the [`RadixDatabase`][] type class. An+instance for [LevelDB][hackage-leveldb-haskell] is already provided.  ```haskell {-# LANGUAGE FlexibleInstances #-}@@ -30,8 +28,8 @@ import DFINITY.RadixTree  instance MonadIO m => RadixDatabase m DB where-   load database = get database defaultReadOptions-   store database = put database defaultWriteOptions+  load database = get database defaultReadOptions+  store database = put database defaultWriteOptions ```  Create a [`RadixTree`][] that is parameterized by your database. If you want to@@ -47,17 +45,16 @@ type RadixTree' = RadixTree DB  createRadixTree'-   :: MonadResource m-   => FilePath -- Database.-   -> Maybe RadixRoot -- State root.-   -> m RadixTree'+  :: MonadResource m+  => FilePath -- Database.+  -> Maybe RadixRoot -- State root.+  -> m RadixTree' createRadixTree' file root = do-   handle <- open file options-   createRadixTree bloomSize cacheSize root handle-   where-   bloomSize = 262144-   cacheSize = 2048-   options   = defaultOptions { createIfMissing = True }+  handle <- open file options+  createRadixTree cacheSize root handle+  where+  cacheSize = 2048+  options   = defaultOptions { createIfMissing = True } ```  Using the definitions above, you can create a radix tree, perform some basic@@ -78,14 +75,14 @@ main :: IO () main = runResourceT $ do -   -- Create a radix tree, insert a key-value pair, and Merkleize.-   tree  <- createRadixTree' "/path/to/database" Nothing-   tree' <- insertRadixTree "Hello" "World" tree-   root  <- fst <$> merkleizeRadixTree tree'+  -- Create a radix tree, insert a key-value pair, and Merkleize.+  tree  <- createRadixTree' "/path/to/database" Nothing+  tree' <- insertRadixTree "Hello" "World" tree+  root  <- fst <$> merkleizeRadixTree tree' -   -- Print the state root.-   liftIO $ putStrLn $ "State Root: 0x" ++ pretty root-   where pretty = unpack . encode . fromShort+  -- Print the state root.+  liftIO $ putStrLn $ "State Root: 0x" ++ pretty root+  where pretty = unpack . encode . fromShort ```  Running the program above should produce the following result.@@ -94,52 +91,39 @@ State Root: 0xb638755216858bc84de8b80f480f15ca5c733e95 ``` -## Contribute--Feel free to join in. All are welcome. Open an [issue][issue-tracker]!- ## License -`dfinity-radix-tree` is licensed under the-[GNU General Public License version 3][license].+`dfinity-radix-tree` is licensed under the [BSD 3-Clause License][license].  [//]: # (----------------------------------------------------------------------)  [dfinity]:-    https://dfinity.org+  https://dfinity.org [dfinity-shield]:-    https://img.shields.io/badge/made%20by-DFINITY-29abe2.svg-[build]:-    https://travis-ci.org/dfinity-lab/hs-dfinity-radix-tree-[build-shield]:-    https://travis-ci.org/dfinity-lab/hs-dfinity-radix-tree.svg?branch=master+  https://img.shields.io/badge/made%20by-DFINITY-29abe2.svg [hackage]:-    https://hackage.haskell.org/package/dfinity-radix-tree+  https://hackage.haskell.org/package/dfinity-radix-tree [hackage-shield]:-    https://img.shields.io/hackage/v/dfinity-radix-tree.svg+  https://img.shields.io/hackage/v/dfinity-radix-tree.svg [deps]:-    https://packdeps.haskellers.com/feed?needle=dfinity-radix-tree+  https://packdeps.haskellers.com/feed?needle=dfinity-radix-tree [deps-shield]:-    https://img.shields.io/hackage-deps/v/dfinity-radix-tree.svg+  https://img.shields.io/hackage-deps/v/dfinity-radix-tree.svg [license]:-    https://www.gnu.org/licenses/gpl-3.0+  https://en.wikipedia.org/wiki/BSD_licenses [license-shield]:-    https://img.shields.io/badge/license-GPLv3-29abe2.svg+  https://img.shields.io/badge/license-BSD%203--Clause-29abe2.svg [wiki-radix-tree]:-    https://en.wikipedia.org/wiki/Radix_tree+  https://en.wikipedia.org/wiki/Radix_tree [wiki-merkle-tree]:-    https://en.wikipedia.org/wiki/Merkle_tree+  https://en.wikipedia.org/wiki/Merkle_tree [hackage-leveldb-haskell]:-    https://hackage.haskell.org/package/leveldb-haskell-[hackage-lmdb-simple]:-    https://hackage.haskell.org/package/lmdb-simple+  https://hackage.haskell.org/package/leveldb-haskell [`RadixDatabase`]:-    https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixDatabase+  https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixDatabase [`RadixTree`]:-    https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixTree+  https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixTree [`RadixRoot`]:-    https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixRoot-[issue-tracker]:-    https://github.com/dfinity-lab/hs-radix-tree/issues+  https://hackage.haskell.org/package/dfinity-radix-tree/docs/DFINITY-RadixTree.html#t:RadixRoot  [//]: # (----------------------------------------------------------------------)
− benchmark/Main.hs
@@ -1,194 +0,0 @@-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE TypeApplications #-}-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE RecordWildCards #-}--{-# OPTIONS -Wall #-}-{-# OPTIONS -fno-cse #-}--module Main where--import Control.Arrow ((>>>))-import Control.Monad (foldM, when)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.Trans.Resource (runResourceT)-import Data.ByteString.Builder (word32BE, toLazyByteString)-import Data.Default.Class (Default(..))-import Data.Maybe (isJust)-import Data.Word (Word32)-import Data.Data (Data)-import System.Console.CmdArgs (cmdArgs)-import System.IO.Temp (withSystemTempDirectory)--import Data.ByteString (ByteString)-import qualified Data.ByteString.Lazy as LBS--import qualified Crypto.Hash.BLAKE2.BLAKE2s as Blake2s--import qualified Database.LevelDB as LevelDB-import qualified Database.LMDB.Simple as LMDB--import DFINITY.RadixTree-------------------------------------------------------------------------------------data Args-  = Args-    { lmdb             :: !Bool-    , lmdb_database    :: !(Maybe FilePath)-    , leveldb          :: !Bool-    , leveldb_database :: !(Maybe FilePath)-    , elements         :: Word32-    }-  deriving (Data)--instance Default Args where-   def = Args False Nothing False Nothing 100000------------------------------------------------------------------------------------isDivisibleBy :: (Integral i) => i -> i -> Bool-isDivisibleBy a b = (a `mod` b) == 0--foldN-   :: (RadixDatabase m database, Monad n)-   => Int-   -> (forall a. m a -> n a)-   -> (RadixTree database -> ByteString -> m (RadixTree database))-   -> RadixTree database-   -> [Word32]-   -> n (RadixTree database)-foldN _ _      _      tree [] = pure tree-foldN n commit action tree xs = do-  let toKey = Blake2s.hash 20 mempty . LBS.toStrict . toLazyByteString . word32BE-  tree' <- commit (foldM (\t -> action t . toKey) tree (take n xs)-                   >>= (merkleizeRadixTree >>> fmap snd))-  foldN n commit action tree' (drop n xs)--foldInsert-  :: (RadixDatabase m database, Monad n)-  => (forall a. m a -> n a)-  -> RadixTree database-  -> [Word32]-  -> n (RadixTree database)-foldInsert commit-  = foldN 2000 commit (\db key -> insertRadixTree key key db)--foldDelete-  :: (RadixDatabase m database, Monad n)-  => (forall a. m a -> n a)-  -> RadixTree database-  -> [Word32]-  -> n (RadixTree database)-foldDelete commit-  = foldN 2000 commit (\db key -> deleteRadixTree key db)------------------------------------------------------------------------------------withDatabasePath :: Maybe FilePath -> String -> (FilePath -> IO a) -> IO a-withDatabasePath Nothing suffix callback = do-  let name = "dfinity-radix-tree-benchmark-" ++ suffix-  withSystemTempDirectory name callback-withDatabasePath (Just fp) _ callback = do-  callback fp------------------------------------------------------------------------------------benchmarkLevelDB :: Args -> IO ()-benchmarkLevelDB args = do-  withDatabasePath (leveldb_database args) "leveldb" $ \dbPath -> do-    let options = def { LevelDB.createIfMissing = True }-    runResourceT $ do-      handle <- LevelDB.open dbPath options-      tree1 <- createRadixTree 262144 2048 Nothing handle-      tree2 <- foldInsert id tree1 [1 .. elements args]-      tree3 <- foldDelete id tree2 [1 .. elements args]-      liftIO $ print $ isEmptyRadixTree tree3--benchmarkLMDB :: Args -> IO ()-benchmarkLMDB args = do-  withDatabasePath (lmdb_database args) "lmdb" $ \dbPath -> do-    let limits = LMDB.defaultLimits { LMDB.mapSize = (1024 * 1024 * 512) }-    env <- LMDB.openReadWriteEnvironment dbPath limits-    db <- LMDB.readOnlyTransaction env (LMDB.getDatabase Nothing)-          :: IO (LMDB.Database ByteString ByteString)-    let runRW = LMDB.readWriteTransaction env-    tree1 <- runRW $ createRadixTree 262144 2048 Nothing db-    tree2 <- foldInsert runRW tree1 [1 .. elements args]-    tree3 <- foldDelete runRW tree2 [1 .. elements args]-    liftIO (print (isEmptyRadixTree tree3))-------------------------------------------------------------------------------------- FIXME: maybe move to hs-dfinity-common or whatever; I can see this---        code getting duplicated--logError, logWarning, logNote :: [String] -> IO ()-logError   msg = putStrLn ("\ESC[31m[ERROR]   " ++ mconcat msg ++ "\ESC[0m")-logWarning msg = putStrLn ("\ESC[33m[WARNING] " ++ mconcat msg ++ "\ESC[0m")-logNote    msg = putStrLn ("\ESC[34m[NOTE]    " ++ mconcat msg ++ "\ESC[0m")--flag :: String -> String-flag s = "\ESC[1m" ++ s ++ "\ESC[21m"------------------------------------------------------------------------------------main :: IO ()-main = do-  args <- cmdArgs def-  when (not (lmdb args) && isJust (lmdb_database args)) $ do-    logWarning [ "ignoring argument: "-               , flag "--lmdb-database"-               , " was specified but not "-               , flag "--lmdb"-               ]-  when (not (leveldb args) && isJust (leveldb_database args)) $ do-    logWarning [ "ignoring argument: "-               , flag "--leveldb-database"-               , " was specified but not "-               , flag "--leveldb"-               ]-  when (not (lmdb args) && not (leveldb args)) $ do-    logError [ "neither ", flag "--lmdb", " nor ", flag "--leveldb"-             , " was specified, quitting"-             ]-  when (leveldb args) $ do-    logNote ["benchmarking LevelDB"]-    benchmarkLevelDB args-  when (lmdb args) $ do-    logNote ["benchmarking LMDB"]-    benchmarkLMDB args-------------------------------------------------------------------------------------- import qualified Criterion      as C--- import qualified Criterion.Main as C------ import qualified System.IO------ getRandom :: Int -> IO ByteString--- getRandom size = do---   System.IO.withFile "/dev/random" System.IO.ReadMode $ \hdl -> do---     BS.hGet hdl size------ main :: IO ()--- main = do---   let blake2b  = Blake2b.hash  20 mempty---   let blake2bp = Blake2bp.hash 20 mempty---   let blake2s  = Blake2s.hash  20 mempty---   let blake2sp = Blake2sp.hash 20 mempty---   let sha256   = BSC8.take 20 . SHA256.hash------   let hashB n = C.env (getRandom n)---                 $ \r -> C.bgroup ("hashing random data of size " ++ show n)---                         [ C.bench "blake2b-160"     (C.nf blake2b  r)---                         , C.bench "blake2bp-160"    (C.nf blake2bp r)---                         , C.bench "blake2s-160"     (C.nf blake2s  r)---                         , C.bench "blake2sp-160"    (C.nf blake2sp r)---                         , C.bench "sha256-take-160" (C.nf sha256   r)---                         ]------   C.defaultMain (map hashB (map (2 ^) ([4 .. 22] :: [Int])))----------------------------------------------------------------------------------
− benchmark/dfinity-radix-tree-benchmarks-leveldb.svg
@@ -1,174 +0,0 @@-<?xml version='1.0' encoding='UTF-8' ?>-<svg xmlns='http://www.w3.org/2000/svg' version='1.0' width='1280.0' height='720.0'>-<defs>-</defs>-<g fill='#ffffff'>-<rect x='0.0' y='0.0' width='1280.0' height='720.0' />-</g>-<g fill='#000000' stroke='#000000' stroke-width='1.0'>-<text stroke='none' x='640.0' y='45.0' font-size='25.0' text-anchor='middle'>dfinity-radix-tree-benchmarks (Tue Sep 25 12:32 2018)</text>-<text stroke='none' transform='translate(30.0,360.0) rotate(-90.0)' font-size='20.0' text-anchor='middle'>bytes</text>-<text stroke='none' x='510.0' y='690.0' font-size='20.0' text-anchor='middle'>seconds</text>-<line x1='60.0' x2='930.0' y1='630.0' y2='630.0' />-<text stroke='none' x='80.0' y='620.0' font-size='15.0' text-anchor='end'>0</text>-<line x1='60.0' x2='930.0' y1='584.4186' y2='584.4186' />-<text stroke='none' x='80.0' y='574.4186' font-size='15.0' text-anchor='end'>1M</text>-<line x1='60.0' x2='930.0' y1='538.8372' y2='538.8372' />-<text stroke='none' x='80.0' y='528.8372' font-size='15.0' text-anchor='end'>2M</text>-<line x1='60.0' x2='930.0' y1='493.2559' y2='493.2559' />-<text stroke='none' x='80.0' y='483.2559' font-size='15.0' text-anchor='end'>3M</text>-<line x1='60.0' x2='930.0' y1='447.6745' y2='447.6745' />-<text stroke='none' x='80.0' y='437.6745' font-size='15.0' text-anchor='end'>4M</text>-<line x1='60.0' x2='930.0' y1='402.0931' y2='402.0931' />-<text stroke='none' x='80.0' y='392.0931' font-size='15.0' text-anchor='end'>5M</text>-<line x1='60.0' x2='930.0' y1='356.5117' y2='356.5117' />-<text stroke='none' x='80.0' y='346.5117' font-size='15.0' text-anchor='end'>6M</text>-<line x1='60.0' x2='930.0' y1='310.9304' y2='310.9304' />-<text stroke='none' x='80.0' y='300.9304' font-size='15.0' text-anchor='end'>7M</text>-<line x1='60.0' x2='930.0' y1='265.349' y2='265.349' />-<text stroke='none' x='80.0' y='255.349' font-size='15.0' text-anchor='end'>8M</text>-<line x1='60.0' x2='930.0' y1='219.7676' y2='219.7676' />-<text stroke='none' x='80.0' y='209.7676' font-size='15.0' text-anchor='end'>9M</text>-<line x1='60.0' x2='930.0' y1='174.1862' y2='174.1862' />-<text stroke='none' x='80.0' y='164.1862' font-size='15.0' text-anchor='end'>10M</text>-<line x1='60.0' x2='930.0' y1='128.6049' y2='128.6049' />-<line x1='90.0' x2='90.0' y1='660.0' y2='90.0' />-<text stroke='none' x='100.0' y='650.0' font-size='15.0' text-anchor='start'>0</text>-<line x1='136.6634' x2='136.6634' y1='660.0' y2='90.0' />-<text stroke='none' x='146.6634' y='650.0' font-size='15.0' text-anchor='start'>2</text>-<line x1='183.3268' x2='183.3268' y1='660.0' y2='90.0' />-<text stroke='none' x='193.3268' y='650.0' font-size='15.0' text-anchor='start'>4</text>-<line x1='229.9903' x2='229.9903' y1='660.0' y2='90.0' />-<text stroke='none' x='239.9903' y='650.0' font-size='15.0' text-anchor='start'>6</text>-<line x1='276.6537' x2='276.6537' y1='660.0' y2='90.0' />-<text stroke='none' x='286.6537' y='650.0' font-size='15.0' text-anchor='start'>8</text>-<line x1='323.3171' x2='323.3171' y1='660.0' y2='90.0' />-<text stroke='none' x='333.3171' y='650.0' font-size='15.0' text-anchor='start'>10</text>-<line x1='369.9805' x2='369.9805' y1='660.0' y2='90.0' />-<text stroke='none' x='379.9805' y='650.0' font-size='15.0' text-anchor='start'>12</text>-<line x1='416.644' x2='416.644' y1='660.0' y2='90.0' />-<text stroke='none' x='426.644' y='650.0' font-size='15.0' text-anchor='start'>14</text>-<line x1='463.3074' x2='463.3074' y1='660.0' y2='90.0' />-<text stroke='none' x='473.3074' y='650.0' font-size='15.0' text-anchor='start'>16</text>-<line x1='509.9708' x2='509.9708' y1='660.0' y2='90.0' />-<text stroke='none' x='519.9708' y='650.0' font-size='15.0' text-anchor='start'>18</text>-<line x1='556.6342' x2='556.6342' y1='660.0' y2='90.0' />-<text stroke='none' x='566.6342' y='650.0' font-size='15.0' text-anchor='start'>20</text>-<line x1='603.2977' x2='603.2977' y1='660.0' y2='90.0' />-<text stroke='none' x='613.2977' y='650.0' font-size='15.0' text-anchor='start'>22</text>-<line x1='649.9611' x2='649.9611' y1='660.0' y2='90.0' />-<text stroke='none' x='659.9611' y='650.0' font-size='15.0' text-anchor='start'>24</text>-<line x1='696.6245' x2='696.6245' y1='660.0' y2='90.0' />-<text stroke='none' x='706.6245' y='650.0' font-size='15.0' text-anchor='start'>26</text>-<line x1='743.2879' x2='743.2879' y1='660.0' y2='90.0' />-<text stroke='none' x='753.2879' y='650.0' font-size='15.0' text-anchor='start'>28</text>-<line x1='789.9514' x2='789.9514' y1='660.0' y2='90.0' />-<text stroke='none' x='799.9514' y='650.0' font-size='15.0' text-anchor='start'>30</text>-<line x1='836.6148' x2='836.6148' y1='660.0' y2='90.0' />-<text stroke='none' x='846.6148' y='650.0' font-size='15.0' text-anchor='start'>32</text>-<line x1='883.2782' x2='883.2782' y1='660.0' y2='90.0' />-<text stroke='none' x='893.2782' y='650.0' font-size='15.0' text-anchor='start'>34</text>-<line x1='929.9416' x2='929.9416' y1='660.0' y2='90.0' />-<g fill-opacity='0.7'>-<g fill='#ffffff'>-<rect x='90.0' y='90.0' width='840.0' height='540.0' />-</g>-<g fill='#5b0991'>-<path d='M 90.0,630.0 L 92.6433,597.0541 L 95.15372,531.2569 L 97.67613,513.7277 L 99.81278,577.382 L 101.8501,510.0473 L 103.4994,528.5924 L 106.4886,509.9525 L 108.4908,592.7713 L 110.2841,502.4411 L 112.6473,516.8473 L 114.5546,551.6175 L 116.8316,502.335 L 119.3788,597.0673 L 121.6822,492.217 L 123.705,517.6182 L 125.5885,558.5054 L 128.0723,503.0592 L 130.105,522.4852 L 133.0004,489.6976 L 134.7958,511.1311 L 136.8103,578.5667 L 140.0529,500.3327 L 142.1093,518.757 L 144.1314,552.2265 L 146.2663,490.6213 L 148.4258,511.5931 L 150.5236,572.6725 L 152.8372,491.1387 L 155.2819,515.7315 L 158.3398,545.9578 L 160.6748,498.9397 L 163.0884,520.5237 L 165.3672,520.6098 L 167.5347,502.9906 L 169.6388,520.9595 L 172.4474,505.1698 L 175.5065,512.5153 L 177.2029,602.4065 L 179.9098,505.995 L 182.6602,509.3348 L 185.9213,576.0287 L 188.3708,495.512 L 190.2262,502.9917 L 192.3246,519.6551 L 194.2909,558.3337 L 196.5647,512.1102 L 199.7518,506.3691 L 202.2474,591.6624 L 204.0998,526.8125 L 205.9408,493.1862 L 208.1028,507.0721 L 211.1581,521.7107 L 213.7918,518.8861 L 215.8168,495.5535 L 218.2187,514.1646 L 220.5154,563.5125 L 222.5646,495.6024 L 225.1122,506.4996 L 226.8727,519.1753 L 229.7175,523.5507 L 231.9877,496.2179 L 234.3029,506.9897 L 237.6196,520.3509 L 240.5253,531.4385 L 242.8595,493.471 L 245.0875,511.2674 L 247.945,551.374 L 249.6492,506.1299 L 252.0386,496.979 L 254.7026,512.7126 L 257.0481,584.718 L 259.3142,537.6168 L 261.5032,487.7806 L 263.3394,501.7942 L 266.3777,516.9702 L 269.0,555.7848 L 271.0772,499.7135 L 273.1464,500.0107 L 275.0689,513.001 L 277.3634,558.3658 L 279.5955,484.4886 L 281.831,506.4573 L 283.8071,604.7928 L 286.4135,507.0393 L 288.4799,498.7654 L 291.5695,515.0999 L 294.42,570.5032 L 296.6762,496.005 L 298.573,498.5072 L 301.084,515.8879 L 303.9454,535.1754 L 306.2932,493.5957 L 309.273,512.8559 L 311.6042,565.96 L 313.8323,496.0017 L 316.6804,503.1303 L 321.1636,520.4763 L 322.9552,544.1163 L 325.3517,493.2916 L 327.4697,508.3831 L 329.6139,590.571 L 332.0689,502.9213 L 334.1626,499.9133 L 336.1178,513.6362 L 340.079,554.7262 L 342.8979,488.5854 L 345.6822,508.6467 L 348.2024,577.9566 L 350.3042,503.2098 L 352.7005,502.2336 L 356.1588,584.6301 L 358.2206,513.4663 L 360.3282,496.9983 L 362.9163,513.6913 L 365.7528,579.7806 L 369.2274,515.7847 L 371.456,495.73 L 373.2011,507.3474 L 375.3482,598.7742 L 378.3631,524.5342 L 380.8915,492.9317 L 383.1835,507.1611 L 385.6954,600.9271 L 387.8095,527.2632 L 389.7126,491.2849 L 392.2899,505.526 L 395.7268,516.9994 L 398.6933,583.1194 L 401.2855,507.8973 L 404.1017,498.8015 L 406.0921,508.0928 L 408.1842,519.6526 L 410.5207,546.6448 L 413.0457,486.2907 L 415.1742,503.0745 L 417.3221,515.8752 L 419.6752,560.6999 L 421.9063,493.2019 L 424.4777,498.0073 L 429.0389,512.8705 L 431.7902,568.1001 L 434.1707,504.8737 L 436.3737,493.4017 L 438.5766,503.5288 L 441.1065,513.343 L 443.6055,598.5419 L 445.6955,557.5099 L 448.1042,516.3186 L 450.0391,482.929 L 452.41,499.0473 L 454.3764,505.9837 L 456.1315,512.3942 L 460.941,586.8833 L 466.2625,540.1438 L 468.0888,486.3683 L 470.1935,501.5696 L 472.5447,517.9019 L 474.9101,544.1911 L 476.8278,482.9548 L 479.6563,507.7165 L 481.6147,606.0884 L 483.7448,536.9195 L 486.159,492.3592 L 488.7521,506.1091 L 494.2829,598.5751 L 497.0599,519.1771 L 498.991,493.1614 L 501.1412,508.0261 L 504.0357,576.2745 L 507.6623,486.8537 L 509.5702,501.0178 L 511.5376,515.0923 L 515.4515,568.3029 L 519.7509,510.7004 L 521.9075,485.712 L 524.4056,554.0534 L 526.6493,550.5134 L 528.6351,489.2768 L 530.839,502.7284 L 532.82,556.001 L 535.2431,539.6734 L 538.3168,478.2859 L 540.8093,545.4283 L 542.9134,560.4228 L 544.7212,507.3588 L 546.8641,477.6565 L 550.2282,550.1779 L 554.8455,561.3176 L 558.0115,497.0172 L 559.8026,483.9354 L 561.9354,539.0626 L 564.932,538.9178 L 567.1033,475.8223 L 569.1623,509.0905 L 571.509,594.4925 L 573.4889,531.4687 L 575.4558,471.7068 L 577.5694,511.2831 L 580.0977,599.8372 L 583.8889,541.9608 L 587.8041,481.6049 L 590.2208,517.7947 L 593.4158,553.6738 L 595.5292,487.3817 L 597.764,509.2476 L 600.4609,581.8063 L 602.2673,524.9244 L 605.2467,495.6812 L 607.4258,556.645 L 609.2806,557.9468 L 611.586,487.0127 L 614.0312,515.2075 L 617.7785,587.5182 L 621.9622,533.9466 L 625.0704,479.4874 L 627.5762,550.7318 L 629.4712,558.4967 L 631.7598,494.1292 L 633.9559,500.255 L 636.1291,562.3357 L 638.3672,536.4419 L 640.8956,464.5196 L 642.8365,525.2354 L 644.7691,594.992 L 646.8958,534.3827 L 649.049,478.7336 L 651.5954,509.8413 L 655.0789,563.0676 L 660.6076,527.09 L 662.575,468.7612 L 664.6472,524.5105 L 667.2961,562.2537 L 669.6418,488.922 L 672.2666,523.997 L 674.3754,587.6396 L 677.1071,501.1867 L 679.4974,505.1202 L 681.4723,559.8123 L 686.5846,535.9518 L 691.3535,487.82 L 693.5026,552.0128 L 696.4927,530.3562 L 698.2563,476.37 L 700.3129,523.1215 L 702.6317,575.7064 L 704.9663,506.2112 L 707.3516,505.4892 L 709.5007,600.06 L 711.4945,534.2882 L 713.4481,474.4165 L 715.9221,533.4681 L 719.2406,579.2727 L 723.0702,539.7875 L 729.2095,486.5135 L 731.3641,551.4702 L 734.3347,521.3333 L 736.5018,486.3198 L 738.6388,551.6146 L 741.4136,532.0959 L 744.3294,499.6427 L 746.4819,604.9076 L 750.0614,489.9405 L 751.8913,509.3012 L 754.7119,588.405 L 759.0603,519.4736 L 762.965,472.8668 L 765.2201,527.4062 L 767.3249,573.3752 L 769.4834,503.523 L 772.0774,518.6772 L 774.1821,581.2287 L 776.875,493.5786 L 778.8907,512.8916 L 780.8402,594.4542 L 782.7586,543.7396 L 784.8973,483.3217 L 786.9721,517.891 L 789.2663,579.0929 L 791.5523,505.961 L 794.2086,517.2714 L 796.5622,590.4591 L 800.2869,537.5763 L 804.73,477.2149 L 807.0721,535.477 L 809.1613,563.4804 L 811.0879,501.5801 L 813.0966,510.5764 L 815.5792,575.9343 L 817.73,504.4678 L 819.7527,510.9316 L 821.6778,593.295 L 824.6789,500.3782 L 826.4951,510.9958 L 830.4225,574.7944 L 835.0155,523.5128 L 839.3655,484.5462 L 841.5744,552.7888 L 843.4292,551.9096 L 845.521,483.9613 L 848.3789,563.6313 L 850.5649,531.3754 L 852.7443,499.2106 L 855.5727,571.6504 L 857.9012,493.2807 L 860.1512,545.9833 L 862.3732,545.3558 L 864.6559,490.6271 L 867.0381,560.7163 L 870.6411,539.4444 L 874.6161,484.68 L 878.5075,560.5249 L 880.4874,543.9719 L 882.8039,503.8559 L 885.0559,576.443 L 887.5112,492.8405 L 889.7691,560.3976 L 892.0994,548.7959 L 894.3653,499.9191 L 896.4549,586.6448 L 898.227,528.3258 L 900.8324,551.18 L 902.8284,547.2005 L 905.5567,544.5524 L 907.7497,547.9914 L 910.3069,536.5717 L 913.7087,538.73 L 918.5348,565.4054 L 922.5647,564.8679 L 926.0456,534.4239 L 929.6209,563.1686 L 930.0,630.0 L 930.0,630.0 L 929.6209,489.9314 L 926.0456,448.6193 L 922.5647,512.0992 L 918.5348,400.1178 L 913.7087,459.3962 L 910.3069,377.077 L 907.7497,478.2042 L 905.5567,355.4255 L 902.8284,474.0235 L 900.8324,333.9471 L 898.227,432.7439 L 896.4549,556.5228 L 894.3653,337.7395 L 892.0994,475.8741 L 889.7691,308.3432 L 887.5112,352.1148 L 885.0559,534.3429 L 882.8039,320.8343 L 880.4874,463.6236 L 878.5075,291.0708 L 874.6161,332.5932 L 870.6411,453.716 L 867.0381,280.4824 L 864.6559,316.74 L 862.3732,465.3181 L 860.1512,280.3241 L 857.9012,350.2157 L 855.5727,522.4425 L 852.7443,302.2236 L 850.5649,433.7922 L 848.3789,257.3726 L 845.521,326.7099 L 843.4292,479.204 L 841.5744,258.0913 L 839.3655,300.5334 L 835.0155,414.9274 L 830.4225,529.2754 L 826.4951,281.0334 L 824.6789,361.5162 L 821.6778,557.9854 L 819.7527,275.6559 L 817.73,370.025 L 815.5792,531.1967 L 813.0966,271.4383 L 811.0879,361.7328 L 809.1613,502.2493 L 807.0721,253.6047 L 804.73,306.9415 L 800.2869,444.797 L 796.5622,563.2791 L 794.2086,259.0741 L 791.5523,371.5704 L 789.2663,538.0223 L 786.9721,257.6308 L 784.8973,319.271 L 782.7586,457.4508 L 780.8402,557.5581 L 778.8907,254.718 L 776.875,341.0888 L 774.1821,542.6245 L 772.0774,248.4434 L 769.4834,364.7561 L 767.3249,524.3825 L 765.2201,239.1459 L 762.965,292.5469 L 759.0603,401.021 L 754.7119,559.5764 L 751.8913,253.2696 L 750.0614,331.9532 L 746.4819,544.0189 L 744.3294,259.2141 L 741.4136,427.913 L 738.6388,211.1294 L 736.5018,269.6307 L 734.3347,404.1797 L 731.3641,209.1581 L 729.2095,266.8134 L 723.0702,446.1743 L 719.2406,537.457 L 715.9221,224.4785 L 713.4481,292.5786 L 711.4945,432.7329 L 709.5007,553.1808 L 707.3516,247.3301 L 704.9663,368.1022 L 702.6317,529.5974 L 700.3129,225.3832 L 698.2563,297.3592 L 696.4927,423.6622 L 693.5026,195.3903 L 691.3535,257.0426 L 686.5846,435.6972 L 681.4723,187.9711 L 679.4974,239.8646 L 677.1071,354.4763 L 674.3754,556.4667 L 672.2666,218.3681 L 669.6418,324.852 L 667.2961,496.7904 L 664.6472,214.0729 L 662.575,276.9431 L 660.6076,414.5762 L 655.0789,181.0461 L 651.5954,230.8599 L 649.049,300.6293 L 646.8958,431.0078 L 644.7691,558.5076 L 642.8365,210.7841 L 640.8956,265.632 L 638.3672,435.4897 L 636.1291,170.5292 L 633.9559,232.7481 L 631.7598,335.0323 L 629.4712,487.3055 L 627.5762,182.6957 L 625.0704,256.4121 L 621.9622,429.8558 L 617.7785,556.715 L 614.0312,214.657 L 611.586,318.5392 L 609.2806,485.9432 L 607.4258,175.5588 L 605.2467,236.2717 L 602.2673,407.8276 L 600.4609,543.0592 L 597.764,219.5423 L 595.5292,318.615 L 593.4158,475.3821 L 590.2208,207.1686 L 587.8041,303.4353 L 583.8889,447.0601 L 580.0977,557.5683 L 577.5694,213.8428 L 575.4558,281.4447 L 573.4889,422.3178 L 571.509,561.5091 L 569.1623,215.0345 L 567.1033,288.83 L 564.932,439.7091 L 561.9354,183.5622 L 559.8026,242.8402 L 558.0115,340.8296 L 554.8455,493.8907 L 550.2282,171.5217 L 546.8641,247.8381 L 544.7212,364.8612 L 542.9134,491.2554 L 540.8093,174.0911 L 538.3168,247.9894 L 535.2431,442.5712 L 532.82,164.3093 L 530.839,218.227 L 528.6351,322.6579 L 526.6493,467.3737 L 524.4056,166.1942 L 521.9075,239.1842 L 519.7509,371.9853 L 515.4515,510.0112 L 511.5376,109.8031 L 509.5702,201.4333 L 507.6623,282.0256 L 504.0357,525.1245 L 501.1412,157.7704 L 498.991,256.5868 L 497.0599,381.506 L 494.2829,551.7824 L 488.7521,169.6248 L 486.159,263.4685 L 483.7448,427.657 L 481.6147,541.454 L 479.6563,161.531 L 476.8278,291.5813 L 474.9101,445.4494 L 472.5447,94.76745 L 470.1935,205.9958 L 468.0888,302.9854 L 466.2625,436.4546 L 460.941,552.3304 L 456.1315,138.2543 L 454.3764,180.9739 L 452.41,227.2641 L 450.0391,291.0616 L 448.1042,376.9377 L 445.6955,479.2956 L 443.6055,550.4332 L 441.1065,130.8015 L 438.5766,195.2631 L 436.3737,261.8772 L 434.1707,348.8792 L 431.7902,505.4436 L 429.0389,140.0319 L 424.4777,235.0811 L 421.9063,320.0802 L 419.6752,487.975 L 417.3221,119.1068 L 415.1742,203.2103 L 413.0457,287.5737 L 410.5207,453.1548 L 408.1842,90.0 L 406.0921,171.2716 L 404.1017,230.0748 L 401.2855,358.4907 L 398.6933,542.9111 L 395.7268,112.9606 L 392.2899,186.7229 L 389.7126,280.7839 L 387.8095,406.493 L 385.6954,546.046 L 383.1835,177.9728 L 380.8915,271.9025 L 378.3631,399.3528 L 375.3482,546.4997 L 373.2011,181.4187 L 371.456,258.8312 L 369.2274,379.717 L 365.7528,535.9317 L 362.9163,136.2545 L 360.3282,247.4465 L 358.2206,373.2653 L 356.1588,547.0696 L 352.7005,218.2565 L 350.3042,350.5019 L 348.2024,531.0155 L 345.6822,173.2699 L 342.8979,313.3046 L 340.079,473.975 L 336.1178,146.3397 L 334.1626,234.9517 L 332.0689,349.758 L 329.6139,557.8119 L 327.4697,182.2713 L 325.3517,276.8399 L 322.9552,449.687 L 321.1636,112.6335 L 316.6804,224.329 L 313.8323,334.9332 L 311.6042,502.8615 L 309.273,158.8315 L 306.2932,280.5466 L 303.9454,429.5692 L 301.084,142.1834 L 298.573,251.8452 L 296.6762,333.9676 L 294.42,513.8196 L 291.5695,154.7733 L 288.4799,254.3201 L 286.4135,362.2153 L 283.8071,537.2259 L 281.831,203.0641 L 279.5955,304.5501 L 277.3634,484.3227 L 275.0689,166.7153 L 273.1464,248.4689 L 271.0772,348.3148 L 269.0,480.3461 L 266.3777,154.3977 L 263.3394,242.9146 L 261.5032,306.2315 L 259.3142,437.7768 L 257.0481,548.5373 L 254.7026,185.0507 L 252.0386,277.2213 L 249.6492,364.9979 L 247.945,471.1205 L 245.0875,191.4207 L 242.8595,292.1322 L 240.5253,424.839 L 237.6196,144.2856 L 234.3029,219.8606 L 231.9877,281.9658 L 229.7175,405.9365 L 226.8727,156.1794 L 225.1122,229.285 L 222.5646,342.0829 L 220.5154,499.378 L 218.2187,192.5482 L 215.8168,294.8697 L 213.7918,398.692 L 211.1581,153.0926 L 208.1028,230.6689 L 205.9408,304.5096 L 204.0998,416.5712 L 202.2474,551.5016 L 199.7518,242.7118 L 196.5647,384.355 L 194.2909,489.5802 L 192.3246,175.0235 L 190.2262,264.8717 L 188.3708,348.1955 L 185.9213,530.5108 L 182.6602,237.5856 L 179.9098,372.5086 L 177.2029,536.0911 L 175.5065,221.2988 L 172.4474,371.8781 L 169.6388,185.7304 L 167.5347,277.8434 L 165.3672,408.3239 L 163.0884,192.3893 L 160.6748,300.6202 L 158.3398,464.7263 L 155.2819,220.1345 L 152.8372,327.8163 L 150.5236,523.2925 L 148.4258,247.678 L 146.2663,332.5483 L 144.1314,480.6926 L 142.1093,224.8159 L 140.0529,311.4752 L 136.8103,537.367 L 134.7958,273.5777 L 133.0004,345.3323 L 130.105,230.0187 L 128.0723,315.9093 L 125.5885,496.9797 L 123.705,271.2301 L 121.6822,356.7991 L 119.3788,532.9011 L 116.8316,342.4942 L 114.5546,483.7994 L 112.6473,296.1263 L 110.2841,387.6508 L 108.4908,531.4884 L 106.4886,346.6997 L 103.4994,305.0307 L 101.8501,366.4117 L 99.81278,532.6768 L 97.67613,388.3279 L 95.15372,367.1712 L 92.6433,524.9929 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#3b8166'>-<path d='M 90.0,630.0 L 92.6433,597.6427 L 95.15372,534.7192 L 97.67613,519.7686 L 99.81278,579.5808 L 101.8501,516.2533 L 103.4994,531.0013 L 106.4886,515.7231 L 108.4908,593.8182 L 110.2841,509.6819 L 112.6473,520.9759 L 114.5546,555.4354 L 116.8316,509.0912 L 119.3788,597.7729 L 121.6822,500.0497 L 123.705,521.4536 L 125.5885,561.8562 L 128.0723,509.5277 L 130.105,525.1315 L 133.0004,497.69 L 134.7958,515.9674 L 136.8103,580.5763 L 140.0529,507.1469 L 142.1093,522.0301 L 144.1314,556.0258 L 146.2663,498.4463 L 148.4258,516.331 L 150.5236,575.0453 L 152.8372,498.8916 L 155.2819,519.6719 L 158.3398,550.0962 L 160.6748,505.6128 L 163.0884,523.31 L 165.3672,526.4406 L 167.5347,508.968 L 169.6388,523.6583 L 172.4474,512.0463 L 175.5065,516.7598 L 177.2029,602.7806 L 179.9098,512.8168 L 182.6602,514.1548 L 185.9213,578.1937 L 188.3708,503.0931 L 190.2262,508.9833 L 192.3246,522.5399 L 194.2909,561.6243 L 196.5647,518.5284 L 199.7518,511.6769 L 202.2474,592.7345 L 204.0998,532.2396 L 205.9408,500.9566 L 208.1028,512.2104 L 211.1581,524.1961 L 213.7918,524.928 L 215.8168,502.848 L 218.2187,518.0995 L 220.5154,566.4793 L 222.5646,503.1157 L 225.1122,511.8228 L 226.8727,522.1235 L 229.7175,529.1704 L 231.9877,503.4183 L 234.3029,512.1685 L 237.6196,523.1022 L 240.5253,536.5855 L 242.8595,501.1768 L 245.0875,515.5776 L 247.945,555.1853 L 249.6492,512.9999 L 252.0386,503.989 L 254.7026,516.8608 L 257.0481,586.2397 L 259.3142,542.3711 L 261.5032,495.7545 L 263.3394,507.9061 L 266.3777,520.2674 L 269.0,559.374 L 271.0772,507.1327 L 273.1464,506.3906 L 275.0689,517.1799 L 277.3634,561.6542 L 279.5955,492.7589 L 281.831,511.6208 L 283.8071,605.063 L 286.4135,513.6588 L 288.4799,505.3488 L 291.5695,518.7067 L 294.42,573.0696 L 296.6762,503.6134 L 298.573,505.1978 L 301.084,519.3514 L 303.9454,540.0555 L 306.2932,501.1057 L 309.273,516.9571 L 311.6042,568.7682 L 313.8323,503.5806 L 316.6804,508.9588 L 321.1636,523.2244 L 322.9552,548.3204 L 325.3517,500.7349 L 327.4697,513.1308 L 329.6139,591.6934 L 332.0689,509.9226 L 334.1626,506.1696 L 336.1178,517.4552 L 340.079,558.2312 L 342.8979,496.5822 L 345.6822,513.4513 L 348.2024,579.9597 L 350.3042,510.2001 L 352.7005,508.0983 L 356.1588,586.1835 L 358.2206,519.8583 L 360.3282,503.8858 L 362.9163,517.5475 L 365.7528,581.625 L 369.2274,521.9174 L 371.456,502.8178 L 373.2011,512.3031 L 375.3482,599.3901 L 378.3631,530.1057 L 380.8915,500.5642 L 383.1835,512.2557 L 385.6954,601.4063 L 387.8095,532.6695 L 389.7126,499.145 L 392.2899,510.7015 L 395.7268,520.1631 L 398.6933,584.7034 L 401.2855,514.5814 L 404.1017,505.1814 L 406.0921,512.8559 L 408.1842,522.4214 L 410.5207,550.6629 L 413.0457,494.69 L 415.1742,508.7357 L 417.3221,519.2435 L 419.6752,563.833 L 421.9063,500.8749 L 424.4777,504.6946 L 429.0389,516.8634 L 431.7902,570.7672 L 434.1707,511.7995 L 436.3737,500.9555 L 438.5766,509.1496 L 441.1065,517.1423 L 443.6055,599.183 L 445.6955,560.899 L 448.1042,522.4633 L 450.0391,491.4913 L 452.41,505.5585 L 454.3764,511.1821 L 456.1315,516.4211 L 460.941,588.2781 L 466.2625,544.7395 L 468.0888,494.5435 L 470.1935,507.5228 L 472.5447,520.8961 L 474.9101,548.4345 L 476.8278,491.2689 L 479.6563,512.5189 L 481.6147,606.2973 L 483.7448,541.6454 L 486.159,500.0519 L 488.7521,511.3065 L 494.2829,599.2315 L 497.0599,525.0691 L 498.991,500.6944 L 501.1412,512.7519 L 504.0357,578.3235 L 507.6623,494.9325 L 509.5702,507.1473 L 511.5376,518.5579 L 515.4515,587.528 L 519.7509,560.1766 L 521.9075,547.0368 L 524.4056,564.0401 L 526.6493,579.1979 L 528.6351,550.2351 L 530.839,551.3262 L 532.82,564.5459 L 535.2431,573.9535 L 538.3168,545.2861 L 540.8093,561.9229 L 542.9134,583.7699 L 544.7212,558.6225 L 546.8641,544.9182 L 550.2282,563.1741 L 554.8455,584.0817 L 558.0115,553.5396 L 559.8026,546.4286 L 561.9354,560.1846 L 564.932,573.6815 L 567.1033,543.643 L 569.1623,552.8388 L 571.509,600.1471 L 573.4889,570.2155 L 575.4558,541.5021 L 577.5694,553.3172 L 580.0977,603.1847 L 583.8889,574.9031 L 587.8041,546.2444 L 590.2208,554.872 L 593.4158,580.4921 L 595.5292,548.735 L 597.764,552.7607 L 600.4609,593.8616 L 602.2673,566.6269 L 605.2467,549.3571 L 607.4258,564.6877 L 609.2806,582.5367 L 611.586,548.6252 L 614.0312,554.2069 L 617.7785,596.4634 L 621.9622,571.0611 L 625.0704,545.2755 L 627.5762,563.2061 L 629.4712,582.696 L 631.7598,551.9424 L 633.9559,550.4149 L 636.1291,566.0125 L 638.3672,572.3585 L 640.8956,537.8932 L 642.8365,556.715 L 644.7691,600.5001 L 646.8958,571.204 L 649.049,544.385 L 651.5954,552.8293 L 655.0789,566.251 L 660.6076,567.586 L 662.575,539.8134 L 664.6472,556.6902 L 667.2961,584.3964 L 669.6418,549.2108 L 672.2666,556.5476 L 674.3754,596.7555 L 677.1071,555.1995 L 679.4974,551.7379 L 681.4723,565.4342 L 686.5846,571.6639 L 691.3535,547.1932 L 693.5026,563.5157 L 696.4927,569.0406 L 698.2563,542.9939 L 700.3129,556.2038 L 702.6317,590.9911 L 704.9663,557.1817 L 707.3516,551.9089 L 709.5007,603.1307 L 711.4945,570.672 L 713.4481,541.675 L 715.9221,558.9036 L 719.2406,592.457 L 723.0702,573.5152 L 729.2095,546.868 L 731.3641,563.4785 L 734.3347,564.3573 L 736.5018,546.717 L 738.6388,563.5672 L 741.4136,569.6907 L 744.3294,550.1002 L 746.4819,605.8681 L 750.0614,548.8761 L 751.8913,552.7082 L 754.7119,597.0921 L 759.0603,563.4527 L 762.965,540.4676 L 765.2201,557.433 L 767.3249,589.6226 L 769.4834,555.558 L 772.0774,555.0051 L 774.1821,593.3803 L 776.875,550.3569 L 778.8907,553.4335 L 780.8402,600.1176 L 782.7586,575.112 L 784.8973,545.4199 L 786.9721,554.9027 L 789.2663,592.4446 L 791.5523,556.4853 L 794.2086,554.8126 L 796.5622,597.8673 L 800.2869,571.8805 L 804.73,541.943 L 807.0721,559.5363 L 809.1613,584.6473 L 811.0879,554.2211 L 813.0966,552.966 L 815.5792,590.8678 L 817.73,555.1353 L 819.7527,553.0991 L 821.6778,599.4988 L 824.6789,553.1429 L 826.4951,553.0736 L 830.4225,590.0977 L 835.0155,564.582 L 839.3655,544.8263 L 841.5744,564.1736 L 843.4292,578.6458 L 845.521,544.3956 L 848.3789,567.0467 L 850.5649,568.2482 L 852.7443,550.0335 L 855.5727,588.6231 L 857.9012,549.0493 L 860.1512,562.5359 L 862.3732,575.2043 L 864.6559,546.4493 L 867.0381,566.6532 L 870.6411,572.1656 L 874.6161,544.0226 L 878.5075,566.7615 L 880.4874,574.4177 L 882.8039,551.3007 L 885.0559,590.8569 L 887.5112,547.4419 L 889.7691,566.969 L 892.0994,576.4346 L 894.3653,549.8012 L 896.4549,595.915 L 898.227,565.5399 L 900.8324,564.8117 L 902.8284,575.0876 L 905.5567,563.6507 L 907.7497,575.547 L 910.3069,562.2347 L 913.7087,569.7677 L 918.5348,570.6859 L 922.5647,583.9278 L 926.0456,565.7558 L 929.6209,572.896 L 930.0,630.0 L 930.0,630.0 L 929.6209,563.1686 L 926.0456,534.4239 L 922.5647,564.8679 L 918.5348,565.4054 L 913.7087,538.73 L 910.3069,536.5717 L 907.7497,547.9914 L 905.5567,544.5524 L 902.8284,547.2005 L 900.8324,551.18 L 898.227,528.3258 L 896.4549,586.6448 L 894.3653,499.9191 L 892.0994,548.7959 L 889.7691,560.3976 L 887.5112,492.8405 L 885.0559,576.443 L 882.8039,503.8559 L 880.4874,543.9719 L 878.5075,560.5249 L 874.6161,484.68 L 870.6411,539.4444 L 867.0381,560.7163 L 864.6559,490.6271 L 862.3732,545.3558 L 860.1512,545.9833 L 857.9012,493.2807 L 855.5727,571.6504 L 852.7443,499.2106 L 850.5649,531.3754 L 848.3789,563.6313 L 845.521,483.9613 L 843.4292,551.9096 L 841.5744,552.7888 L 839.3655,484.5462 L 835.0155,523.5128 L 830.4225,574.7944 L 826.4951,510.9958 L 824.6789,500.3782 L 821.6778,593.295 L 819.7527,510.9316 L 817.73,504.4678 L 815.5792,575.9343 L 813.0966,510.5764 L 811.0879,501.5801 L 809.1613,563.4804 L 807.0721,535.477 L 804.73,477.2149 L 800.2869,537.5763 L 796.5622,590.4591 L 794.2086,517.2714 L 791.5523,505.961 L 789.2663,579.0929 L 786.9721,517.891 L 784.8973,483.3217 L 782.7586,543.7396 L 780.8402,594.4542 L 778.8907,512.8916 L 776.875,493.5786 L 774.1821,581.2287 L 772.0774,518.6772 L 769.4834,503.523 L 767.3249,573.3752 L 765.2201,527.4062 L 762.965,472.8668 L 759.0603,519.4736 L 754.7119,588.405 L 751.8913,509.3012 L 750.0614,489.9405 L 746.4819,604.9076 L 744.3294,499.6427 L 741.4136,532.0959 L 738.6388,551.6146 L 736.5018,486.3198 L 734.3347,521.3333 L 731.3641,551.4702 L 729.2095,486.5135 L 723.0702,539.7875 L 719.2406,579.2727 L 715.9221,533.4681 L 713.4481,474.4165 L 711.4945,534.2882 L 709.5007,600.06 L 707.3516,505.4892 L 704.9663,506.2112 L 702.6317,575.7064 L 700.3129,523.1215 L 698.2563,476.37 L 696.4927,530.3562 L 693.5026,552.0128 L 691.3535,487.82 L 686.5846,535.9518 L 681.4723,559.8123 L 679.4974,505.1202 L 677.1071,501.1867 L 674.3754,587.6396 L 672.2666,523.997 L 669.6418,488.922 L 667.2961,562.2537 L 664.6472,524.5105 L 662.575,468.7612 L 660.6076,527.09 L 655.0789,563.0676 L 651.5954,509.8413 L 649.049,478.7336 L 646.8958,534.3827 L 644.7691,594.992 L 642.8365,525.2354 L 640.8956,464.5196 L 638.3672,536.4419 L 636.1291,562.3357 L 633.9559,500.255 L 631.7598,494.1292 L 629.4712,558.4967 L 627.5762,550.7318 L 625.0704,479.4874 L 621.9622,533.9466 L 617.7785,587.5182 L 614.0312,515.2075 L 611.586,487.0127 L 609.2806,557.9468 L 607.4258,556.645 L 605.2467,495.6812 L 602.2673,524.9244 L 600.4609,581.8063 L 597.764,509.2476 L 595.5292,487.3817 L 593.4158,553.6738 L 590.2208,517.7947 L 587.8041,481.6049 L 583.8889,541.9608 L 580.0977,599.8372 L 577.5694,511.2831 L 575.4558,471.7068 L 573.4889,531.4687 L 571.509,594.4925 L 569.1623,509.0905 L 567.1033,475.8223 L 564.932,538.9178 L 561.9354,539.0626 L 559.8026,483.9354 L 558.0115,497.0172 L 554.8455,561.3176 L 550.2282,550.1779 L 546.8641,477.6565 L 544.7212,507.3588 L 542.9134,560.4228 L 540.8093,545.4283 L 538.3168,478.2859 L 535.2431,539.6734 L 532.82,556.001 L 530.839,502.7284 L 528.6351,489.2768 L 526.6493,550.5134 L 524.4056,554.0534 L 521.9075,485.712 L 519.7509,510.7004 L 515.4515,568.3029 L 511.5376,515.0923 L 509.5702,501.0178 L 507.6623,486.8537 L 504.0357,576.2745 L 501.1412,508.0261 L 498.991,493.1614 L 497.0599,519.1771 L 494.2829,598.5751 L 488.7521,506.1091 L 486.159,492.3592 L 483.7448,536.9195 L 481.6147,606.0884 L 479.6563,507.7165 L 476.8278,482.9548 L 474.9101,544.1911 L 472.5447,517.9019 L 470.1935,501.5696 L 468.0888,486.3683 L 466.2625,540.1438 L 460.941,586.8833 L 456.1315,512.3942 L 454.3764,505.9837 L 452.41,499.0473 L 450.0391,482.929 L 448.1042,516.3186 L 445.6955,557.5099 L 443.6055,598.5419 L 441.1065,513.343 L 438.5766,503.5288 L 436.3737,493.4017 L 434.1707,504.8737 L 431.7902,568.1001 L 429.0389,512.8705 L 424.4777,498.0073 L 421.9063,493.2019 L 419.6752,560.6999 L 417.3221,515.8752 L 415.1742,503.0745 L 413.0457,486.2907 L 410.5207,546.6448 L 408.1842,519.6526 L 406.0921,508.0928 L 404.1017,498.8015 L 401.2855,507.8973 L 398.6933,583.1194 L 395.7268,516.9994 L 392.2899,505.526 L 389.7126,491.2849 L 387.8095,527.2632 L 385.6954,600.9271 L 383.1835,507.1611 L 380.8915,492.9317 L 378.3631,524.5342 L 375.3482,598.7742 L 373.2011,507.3474 L 371.456,495.73 L 369.2274,515.7847 L 365.7528,579.7806 L 362.9163,513.6913 L 360.3282,496.9983 L 358.2206,513.4663 L 356.1588,584.6301 L 352.7005,502.2336 L 350.3042,503.2098 L 348.2024,577.9566 L 345.6822,508.6467 L 342.8979,488.5854 L 340.079,554.7262 L 336.1178,513.6362 L 334.1626,499.9133 L 332.0689,502.9213 L 329.6139,590.571 L 327.4697,508.3831 L 325.3517,493.2916 L 322.9552,544.1163 L 321.1636,520.4763 L 316.6804,503.1303 L 313.8323,496.0017 L 311.6042,565.96 L 309.273,512.8559 L 306.2932,493.5957 L 303.9454,535.1754 L 301.084,515.8879 L 298.573,498.5072 L 296.6762,496.005 L 294.42,570.5032 L 291.5695,515.0999 L 288.4799,498.7654 L 286.4135,507.0393 L 283.8071,604.7928 L 281.831,506.4573 L 279.5955,484.4886 L 277.3634,558.3658 L 275.0689,513.001 L 273.1464,500.0107 L 271.0772,499.7135 L 269.0,555.7848 L 266.3777,516.9702 L 263.3394,501.7942 L 261.5032,487.7806 L 259.3142,537.6168 L 257.0481,584.718 L 254.7026,512.7126 L 252.0386,496.979 L 249.6492,506.1299 L 247.945,551.374 L 245.0875,511.2674 L 242.8595,493.471 L 240.5253,531.4385 L 237.6196,520.3509 L 234.3029,506.9897 L 231.9877,496.2179 L 229.7175,523.5507 L 226.8727,519.1753 L 225.1122,506.4996 L 222.5646,495.6024 L 220.5154,563.5125 L 218.2187,514.1646 L 215.8168,495.5535 L 213.7918,518.8861 L 211.1581,521.7107 L 208.1028,507.0721 L 205.9408,493.1862 L 204.0998,526.8125 L 202.2474,591.6624 L 199.7518,506.3691 L 196.5647,512.1102 L 194.2909,558.3337 L 192.3246,519.6551 L 190.2262,502.9917 L 188.3708,495.512 L 185.9213,576.0287 L 182.6602,509.3348 L 179.9098,505.995 L 177.2029,602.4065 L 175.5065,512.5153 L 172.4474,505.1698 L 169.6388,520.9595 L 167.5347,502.9906 L 165.3672,520.6098 L 163.0884,520.5237 L 160.6748,498.9397 L 158.3398,545.9578 L 155.2819,515.7315 L 152.8372,491.1387 L 150.5236,572.6725 L 148.4258,511.5931 L 146.2663,490.6213 L 144.1314,552.2265 L 142.1093,518.757 L 140.0529,500.3327 L 136.8103,578.5667 L 134.7958,511.1311 L 133.0004,489.6976 L 130.105,522.4852 L 128.0723,503.0592 L 125.5885,558.5054 L 123.705,517.6182 L 121.6822,492.217 L 119.3788,597.0673 L 116.8316,502.335 L 114.5546,551.6175 L 112.6473,516.8473 L 110.2841,502.4411 L 108.4908,592.7713 L 106.4886,509.9525 L 103.4994,528.5924 L 101.8501,510.0473 L 99.81278,577.382 L 97.67613,513.7277 L 95.15372,531.2569 L 92.6433,597.0541 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#e6564e'>-<path d='M 90.0,630.0 L 92.6433,602.0805 L 95.15372,550.0255 L 97.67613,537.4341 L 99.81278,587.027 L 101.8501,534.4075 L 103.4994,547.1571 L 106.4886,534.1161 L 108.4908,599.0109 L 110.2841,528.374 L 112.6473,538.5959 L 114.5546,566.7141 L 116.8316,528.456 L 119.3788,602.4842 L 121.6822,520.3571 L 123.705,539.1501 L 125.5885,572.0136 L 128.0723,528.8907 L 130.105,542.3084 L 133.0004,518.3001 L 134.7958,534.4826 L 136.8103,587.769 L 140.0529,526.8125 L 142.1093,539.7248 L 144.1314,567.1185 L 146.2663,519.1421 L 148.4258,534.7933 L 150.5236,583.0858 L 152.8372,519.5344 L 155.2819,537.6802 L 158.3398,562.1443 L 160.6748,525.5355 L 163.0884,540.8972 L 165.3672,542.2263 L 167.5347,528.413 L 169.6388,541.2035 L 172.4474,530.195 L 175.5065,535.2367 L 177.2029,606.872 L 179.9098,530.7832 L 182.6602,532.9817 L 185.9213,585.7292 L 188.3708,522.5982 L 190.2262,528.5049 L 192.3246,540.2401 L 194.2909,571.8181 L 196.5647,535.6068 L 199.7518,530.8321 L 202.2474,598.0438 L 204.0998,547.0991 L 205.9408,521.5648 L 208.1028,531.3382 L 211.1581,541.7176 L 213.7918,540.9307 L 215.8168,523.1955 L 218.2187,536.4652 L 220.5154,575.9255 L 222.5646,522.6336 L 225.1122,530.9925 L 226.8727,539.9276 L 229.7175,544.4912 L 231.9877,523.6492 L 234.3029,531.2507 L 237.6196,540.7531 L 240.5253,550.7942 L 242.8595,521.7413 L 245.0875,534.2623 L 247.945,566.3691 L 249.6492,530.8879 L 252.0386,524.2253 L 254.7026,535.4325 L 257.0481,592.4533 L 259.3142,555.6006 L 261.5032,516.7766 L 263.3394,527.61 L 266.3777,538.365 L 269.0,569.865 L 271.0772,525.9523 L 273.1464,526.2896 L 275.0689,535.6531 L 277.3634,571.8498 L 279.5955,514.018 L 281.831,530.8598 L 283.8071,608.9173 L 286.4135,531.4921 L 288.4799,525.4502 L 291.5695,537.0322 L 294.42,581.442 L 296.6762,523.0293 L 298.573,525.2773 L 301.084,537.5438 L 303.9454,553.6388 L 306.2932,521.7486 L 309.273,535.5087 L 311.6042,577.7732 L 313.8323,522.9618 L 316.6804,528.557 L 321.1636,540.9026 L 322.9552,560.5745 L 325.3517,521.4142 L 327.4697,532.1875 L 329.6139,597.0556 L 332.0689,528.2937 L 334.1626,526.1525 L 336.1178,535.9521 L 340.079,568.9592 L 342.8979,517.0537 L 345.6822,532.4023 L 348.2024,587.1943 L 350.3042,528.4874 L 352.7005,527.8077 L 356.1588,592.4318 L 358.2206,536.6468 L 360.3282,524.1896 L 362.9163,535.9897 L 365.7528,588.5625 L 369.2274,538.3194 L 371.456,523.2145 L 373.2011,531.4728 L 375.3482,603.8644 L 378.3631,545.297 L 380.8915,521.3238 L 383.1835,531.4436 L 385.6954,605.6873 L 387.8095,547.3996 L 389.7126,520.0869 L 392.2899,530.0809 L 395.7268,538.3136 L 398.6933,591.1979 L 401.2855,532.1904 L 404.1017,525.3065 L 406.0921,531.9654 L 408.1842,540.2747 L 410.5207,562.5815 L 413.0457,515.889 L 415.1742,528.4086 L 417.3221,537.5398 L 419.6752,573.633 L 421.9063,520.7174 L 424.4777,524.8817 L 429.0389,535.4898 L 431.7902,579.4641 L 434.1707,529.8242 L 436.3737,521.6294 L 438.5766,528.7532 L 441.1065,535.6684 L 443.6055,603.6974 L 445.6955,571.1621 L 448.1042,538.8106 L 450.0391,512.8416 L 452.41,525.6653 L 454.3764,530.536 L 456.1315,535.1058 L 460.941,594.1599 L 466.2625,557.5442 L 468.0888,515.3213 L 470.1935,527.3726 L 472.5447,538.9736 L 474.9101,560.7123 L 476.8278,512.6538 L 479.6563,531.6649 L 481.6147,610.0842 L 483.7448,554.9515 L 486.159,520.8388 L 488.7521,530.6293 L 494.2829,603.7604 L 497.0599,540.9934 L 498.991,521.392 L 501.1412,531.9071 L 504.0357,585.8061 L 507.6623,516.1698 L 509.5702,526.9952 L 511.5376,536.9381 L 515.4515,593.676 L 519.7509,570.726 L 521.9075,560.6401 L 524.4056,575.131 L 526.6493,586.6951 L 528.6351,562.3653 L 530.839,564.3533 L 532.82,575.5638 L 535.2431,582.2985 L 538.3168,559.1556 L 540.8093,573.3128 L 542.9134,590.5251 L 544.7212,569.4198 L 546.8641,558.8333 L 550.2282,574.3907 L 554.8455,590.7767 L 558.0115,565.1319 L 559.8026,560.1248 L 561.9354,571.8444 L 564.932,582.0903 L 567.1033,556.8725 L 569.1623,565.6015 L 571.509,604.4062 L 573.4889,579.2169 L 575.4558,555.0307 L 577.5694,566.0052 L 580.0977,607.225 L 583.8889,583.0949 L 587.8041,559.0509 L 590.2208,567.3066 L 593.4158,587.7978 L 595.5292,561.1112 L 597.764,565.5107 L 600.4609,598.9923 L 602.2673,576.1133 L 605.2467,562.6103 L 607.4258,575.6947 L 609.2806,589.5124 L 611.586,561.058 L 614.0312,566.7382 L 617.7785,601.1492 L 621.9622,579.8747 L 625.0704,559.1724 L 627.5762,574.3991 L 629.4712,589.6335 L 631.7598,563.8374 L 633.9559,563.5387 L 636.1291,576.7971 L 638.3672,581.0135 L 640.8956,552.1164 L 642.8365,568.8743 L 644.7691,604.7428 L 646.8958,580.0231 L 649.049,557.4979 L 651.5954,565.5501 L 655.0789,576.9918 L 660.6076,576.9684 L 662.575,553.7285 L 664.6472,568.8385 L 667.2961,591.0458 L 669.6418,561.5433 L 672.2666,568.7525 L 674.3754,601.465 L 677.1071,566.6149 L 679.4974,564.641 L 681.4723,576.2661 L 686.5846,580.3736 L 691.3535,560.7692 L 693.5026,574.654 L 696.4927,578.1969 L 698.2563,556.3948 L 700.3129,568.4597 L 702.6317,596.5848 L 704.9663,568.2416 L 707.3516,564.8084 L 709.5007,607.1637 L 711.4945,579.5567 L 713.4481,555.2874 L 715.9221,570.7402 L 719.2406,597.8155 L 723.0702,581.9459 L 729.2095,560.4822 L 731.3641,574.5986 L 734.3347,574.2576 L 736.5018,560.3422 L 738.6388,574.6945 L 741.4136,578.7851 L 744.3294,563.2094 L 746.4819,609.697 L 750.0614,561.2943 L 751.8913,565.4947 L 754.7119,601.7013 L 759.0603,573.5207 L 762.965,554.2624 L 765.2201,569.5029 L 767.3249,595.4661 L 769.4834,566.8858 L 772.0774,567.4179 L 774.1821,598.5966 L 776.875,562.5089 L 778.8907,566.0504 L 780.8402,604.4168 L 782.7586,583.313 L 784.8973,558.438 L 786.9721,567.2953 L 789.2663,597.856 L 791.5523,567.6928 L 794.2086,567.2454 L 796.5622,602.3689 L 800.2869,580.5756 L 804.73,555.5025 L 807.0721,571.227 L 809.1613,591.3094 L 811.0879,565.8134 L 813.0966,565.6613 L 815.5792,596.571 L 817.73,566.5635 L 819.7527,565.7671 L 821.6778,603.8527 L 824.6789,564.8974 L 826.4951,565.7489 L 830.4225,595.8665 L 835.0155,574.4987 L 839.3655,558.5116 L 841.5744,575.1441 L 843.4292,586.2907 L 845.521,557.616 L 848.3789,577.6179 L 850.5649,577.6051 L 852.7443,563.1792 L 855.5727,594.6908 L 857.9012,561.5368 L 860.1512,573.7635 L 862.3732,583.4891 L 864.6559,559.9086 L 867.0381,577.2518 L 870.6411,580.8935 L 874.6161,557.398 L 878.5075,577.2707 L 880.4874,582.843 L 882.8039,564.2148 L 885.0559,596.5692 L 887.5112,560.3013 L 889.7691,577.4928 L 892.0994,584.5134 L 894.3653,562.8575 L 896.4549,600.7703 L 898.227,575.442 L 900.8324,575.5963 L 902.8284,583.4326 L 905.5567,574.6139 L 907.7497,583.8775 L 910.3069,573.4222 L 913.7087,579.1684 L 918.5348,580.4038 L 922.5647,591.0002 L 926.0456,576.2103 L 929.6209,582.1563 L 930.0,630.0 L 930.0,630.0 L 929.6209,572.896 L 926.0456,565.7558 L 922.5647,583.9278 L 918.5348,570.6859 L 913.7087,569.7677 L 910.3069,562.2347 L 907.7497,575.547 L 905.5567,563.6507 L 902.8284,575.0876 L 900.8324,564.8117 L 898.227,565.5399 L 896.4549,595.915 L 894.3653,549.8012 L 892.0994,576.4346 L 889.7691,566.969 L 887.5112,547.4419 L 885.0559,590.8569 L 882.8039,551.3007 L 880.4874,574.4177 L 878.5075,566.7615 L 874.6161,544.0226 L 870.6411,572.1656 L 867.0381,566.6532 L 864.6559,546.4493 L 862.3732,575.2043 L 860.1512,562.5359 L 857.9012,549.0493 L 855.5727,588.6231 L 852.7443,550.0335 L 850.5649,568.2482 L 848.3789,567.0467 L 845.521,544.3956 L 843.4292,578.6458 L 841.5744,564.1736 L 839.3655,544.8263 L 835.0155,564.582 L 830.4225,590.0977 L 826.4951,553.0736 L 824.6789,553.1429 L 821.6778,599.4988 L 819.7527,553.0991 L 817.73,555.1353 L 815.5792,590.8678 L 813.0966,552.966 L 811.0879,554.2211 L 809.1613,584.6473 L 807.0721,559.5363 L 804.73,541.943 L 800.2869,571.8805 L 796.5622,597.8673 L 794.2086,554.8126 L 791.5523,556.4853 L 789.2663,592.4446 L 786.9721,554.9027 L 784.8973,545.4199 L 782.7586,575.112 L 780.8402,600.1176 L 778.8907,553.4335 L 776.875,550.3569 L 774.1821,593.3803 L 772.0774,555.0051 L 769.4834,555.558 L 767.3249,589.6226 L 765.2201,557.433 L 762.965,540.4676 L 759.0603,563.4527 L 754.7119,597.0921 L 751.8913,552.7082 L 750.0614,548.8761 L 746.4819,605.8681 L 744.3294,550.1002 L 741.4136,569.6907 L 738.6388,563.5672 L 736.5018,546.717 L 734.3347,564.3573 L 731.3641,563.4785 L 729.2095,546.868 L 723.0702,573.5152 L 719.2406,592.457 L 715.9221,558.9036 L 713.4481,541.675 L 711.4945,570.672 L 709.5007,603.1307 L 707.3516,551.9089 L 704.9663,557.1817 L 702.6317,590.9911 L 700.3129,556.2038 L 698.2563,542.9939 L 696.4927,569.0406 L 693.5026,563.5157 L 691.3535,547.1932 L 686.5846,571.6639 L 681.4723,565.4342 L 679.4974,551.7379 L 677.1071,555.1995 L 674.3754,596.7555 L 672.2666,556.5476 L 669.6418,549.2108 L 667.2961,584.3964 L 664.6472,556.6902 L 662.575,539.8134 L 660.6076,567.586 L 655.0789,566.251 L 651.5954,552.8293 L 649.049,544.385 L 646.8958,571.204 L 644.7691,600.5001 L 642.8365,556.715 L 640.8956,537.8932 L 638.3672,572.3585 L 636.1291,566.0125 L 633.9559,550.4149 L 631.7598,551.9424 L 629.4712,582.696 L 627.5762,563.2061 L 625.0704,545.2755 L 621.9622,571.0611 L 617.7785,596.4634 L 614.0312,554.2069 L 611.586,548.6252 L 609.2806,582.5367 L 607.4258,564.6877 L 605.2467,549.3571 L 602.2673,566.6269 L 600.4609,593.8616 L 597.764,552.7607 L 595.5292,548.735 L 593.4158,580.4921 L 590.2208,554.872 L 587.8041,546.2444 L 583.8889,574.9031 L 580.0977,603.1847 L 577.5694,553.3172 L 575.4558,541.5021 L 573.4889,570.2155 L 571.509,600.1471 L 569.1623,552.8388 L 567.1033,543.643 L 564.932,573.6815 L 561.9354,560.1846 L 559.8026,546.4286 L 558.0115,553.5396 L 554.8455,584.0817 L 550.2282,563.1741 L 546.8641,544.9182 L 544.7212,558.6225 L 542.9134,583.7699 L 540.8093,561.9229 L 538.3168,545.2861 L 535.2431,573.9535 L 532.82,564.5459 L 530.839,551.3262 L 528.6351,550.2351 L 526.6493,579.1979 L 524.4056,564.0401 L 521.9075,547.0368 L 519.7509,560.1766 L 515.4515,587.528 L 511.5376,518.5579 L 509.5702,507.1473 L 507.6623,494.9325 L 504.0357,578.3235 L 501.1412,512.7519 L 498.991,500.6944 L 497.0599,525.0691 L 494.2829,599.2315 L 488.7521,511.3065 L 486.159,500.0519 L 483.7448,541.6454 L 481.6147,606.2973 L 479.6563,512.5189 L 476.8278,491.2689 L 474.9101,548.4345 L 472.5447,520.8961 L 470.1935,507.5228 L 468.0888,494.5435 L 466.2625,544.7395 L 460.941,588.2781 L 456.1315,516.4211 L 454.3764,511.1821 L 452.41,505.5585 L 450.0391,491.4913 L 448.1042,522.4633 L 445.6955,560.899 L 443.6055,599.183 L 441.1065,517.1423 L 438.5766,509.1496 L 436.3737,500.9555 L 434.1707,511.7995 L 431.7902,570.7672 L 429.0389,516.8634 L 424.4777,504.6946 L 421.9063,500.8749 L 419.6752,563.833 L 417.3221,519.2435 L 415.1742,508.7357 L 413.0457,494.69 L 410.5207,550.6629 L 408.1842,522.4214 L 406.0921,512.8559 L 404.1017,505.1814 L 401.2855,514.5814 L 398.6933,584.7034 L 395.7268,520.1631 L 392.2899,510.7015 L 389.7126,499.145 L 387.8095,532.6695 L 385.6954,601.4063 L 383.1835,512.2557 L 380.8915,500.5642 L 378.3631,530.1057 L 375.3482,599.3901 L 373.2011,512.3031 L 371.456,502.8178 L 369.2274,521.9174 L 365.7528,581.625 L 362.9163,517.5475 L 360.3282,503.8858 L 358.2206,519.8583 L 356.1588,586.1835 L 352.7005,508.0983 L 350.3042,510.2001 L 348.2024,579.9597 L 345.6822,513.4513 L 342.8979,496.5822 L 340.079,558.2312 L 336.1178,517.4552 L 334.1626,506.1696 L 332.0689,509.9226 L 329.6139,591.6934 L 327.4697,513.1308 L 325.3517,500.7349 L 322.9552,548.3204 L 321.1636,523.2244 L 316.6804,508.9588 L 313.8323,503.5806 L 311.6042,568.7682 L 309.273,516.9571 L 306.2932,501.1057 L 303.9454,540.0555 L 301.084,519.3514 L 298.573,505.1978 L 296.6762,503.6134 L 294.42,573.0696 L 291.5695,518.7067 L 288.4799,505.3488 L 286.4135,513.6588 L 283.8071,605.063 L 281.831,511.6208 L 279.5955,492.7589 L 277.3634,561.6542 L 275.0689,517.1799 L 273.1464,506.3906 L 271.0772,507.1327 L 269.0,559.374 L 266.3777,520.2674 L 263.3394,507.9061 L 261.5032,495.7545 L 259.3142,542.3711 L 257.0481,586.2397 L 254.7026,516.8608 L 252.0386,503.989 L 249.6492,512.9999 L 247.945,555.1853 L 245.0875,515.5776 L 242.8595,501.1768 L 240.5253,536.5855 L 237.6196,523.1022 L 234.3029,512.1685 L 231.9877,503.4183 L 229.7175,529.1704 L 226.8727,522.1235 L 225.1122,511.8228 L 222.5646,503.1157 L 220.5154,566.4793 L 218.2187,518.0995 L 215.8168,502.848 L 213.7918,524.928 L 211.1581,524.1961 L 208.1028,512.2104 L 205.9408,500.9566 L 204.0998,532.2396 L 202.2474,592.7345 L 199.7518,511.6769 L 196.5647,518.5284 L 194.2909,561.6243 L 192.3246,522.5399 L 190.2262,508.9833 L 188.3708,503.0931 L 185.9213,578.1937 L 182.6602,514.1548 L 179.9098,512.8168 L 177.2029,602.7806 L 175.5065,516.7598 L 172.4474,512.0463 L 169.6388,523.6583 L 167.5347,508.968 L 165.3672,526.4406 L 163.0884,523.31 L 160.6748,505.6128 L 158.3398,550.0962 L 155.2819,519.6719 L 152.8372,498.8916 L 150.5236,575.0453 L 148.4258,516.331 L 146.2663,498.4463 L 144.1314,556.0258 L 142.1093,522.0301 L 140.0529,507.1469 L 136.8103,580.5763 L 134.7958,515.9674 L 133.0004,497.69 L 130.105,525.1315 L 128.0723,509.5277 L 125.5885,561.8562 L 123.705,521.4536 L 121.6822,500.0497 L 119.3788,597.7729 L 116.8316,509.0912 L 114.5546,555.4354 L 112.6473,520.9759 L 110.2841,509.6819 L 108.4908,593.8182 L 106.4886,515.7231 L 103.4994,531.0013 L 101.8501,516.2533 L 99.81278,579.5808 L 97.67613,519.7686 L 95.15372,534.7192 L 92.6433,597.6427 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#fba63a'>-<path d='M 90.0,630.0 L 92.6433,605.6089 L 95.15372,561.555 L 97.67613,549.7104 L 99.81278,592.0314 L 101.8501,547.2716 L 103.4994,560.4793 L 106.4886,547.4456 L 108.4908,602.8477 L 110.2841,540.8786 L 112.6473,552.4074 L 114.5546,574.3915 L 116.8316,542.1486 L 119.3788,606.0862 L 121.6822,534.076 L 123.705,553.1454 L 125.5885,578.9901 L 128.0723,542.9049 L 130.105,556.6545 L 133.0004,532.3093 L 134.7958,548.7186 L 136.8103,592.7764 L 140.0529,540.9435 L 142.1093,554.1672 L 144.1314,574.7696 L 146.2663,533.3956 L 148.4258,549.224 L 150.5236,588.6985 L 152.8372,533.7821 L 155.2819,552.1773 L 158.3398,570.4539 L 160.6748,539.8889 L 163.0884,555.5503 L 165.3672,553.0229 L 167.5347,542.7948 L 169.6388,555.8829 L 172.4474,542.5589 L 175.5065,549.8089 L 177.2029,610.1531 L 179.9098,543.0362 L 182.6602,547.4758 L 185.9213,591.0173 L 188.3708,535.9007 L 190.2262,543.0296 L 192.3246,554.9778 L 194.2909,578.8799 L 196.5647,547.2727 L 199.7518,545.3802 L 202.2474,601.8989 L 204.0998,557.2758 L 205.9408,536.0313 L 208.1028,545.9651 L 211.1581,556.505 L 213.7918,551.9082 L 215.8168,537.6882 L 218.2187,551.1803 L 220.5154,582.4863 L 222.5646,535.9076 L 225.1122,545.553 L 226.8727,554.6908 L 229.7175,555.0092 L 231.9877,538.1732 L 234.3029,545.9534 L 237.6196,555.628 L 240.5253,560.5515 L 242.8595,536.2785 L 245.0875,549.0365 L 247.945,574.1267 L 249.6492,543.1394 L 252.0386,538.7771 L 254.7026,550.1928 L 257.0481,596.8824 L 259.3142,564.7191 L 261.5032,531.2868 L 263.3394,542.2566 L 266.3777,553.1815 L 269.0,577.1551 L 271.0772,538.8165 L 273.1464,540.9632 L 275.0689,550.5367 L 277.3634,578.9452 L 279.5955,528.5807 L 281.831,545.6639 L 283.8071,612.0657 L 286.4135,543.7064 L 288.4799,540.0895 L 291.5695,551.8553 L 294.42,587.3129 L 296.6762,536.2821 L 298.573,539.9239 L 301.084,552.4442 L 303.9454,563.0125 L 306.2932,536.3886 L 309.273,550.3806 L 311.6042,584.0693 L 313.8323,536.1782 L 316.6804,543.2284 L 321.1636,555.8066 L 322.9552,569.0708 L 325.3517,536.0732 L 327.4697,547.0317 L 329.6139,600.9559 L 332.0689,540.8691 L 334.1626,540.8815 L 336.1178,550.8693 L 340.079,576.4426 L 342.8979,531.0746 L 345.6822,547.2676 L 348.2024,592.3104 L 350.3042,541.0335 L 352.7005,542.5994 L 356.1588,596.882 L 358.2206,548.161 L 360.3282,538.9142 L 362.9163,550.9163 L 365.7528,593.486 L 369.2274,549.601 L 371.456,537.9078 L 373.2011,546.341 L 375.3482,607.33 L 378.3631,555.7829 L 380.8915,536.0484 L 383.1835,546.3279 L 385.6954,609.0362 L 387.8095,557.5479 L 389.7126,534.7882 L 392.2899,544.9594 L 395.7268,553.3132 L 398.6933,595.834 L 401.2855,544.3026 L 404.1017,540.1478 L 406.0921,546.8643 L 408.1842,555.3341 L 410.5207,570.8759 L 413.0457,530.5888 L 415.1742,543.2652 L 417.3221,552.5452 L 419.6752,580.4906 L 421.9063,534.313 L 424.4777,539.6522 L 429.0389,550.4084 L 431.7902,585.583 L 434.1707,542.2019 L 436.3737,536.3759 L 438.5766,543.6193 L 441.1065,550.6446 L 443.6055,607.147 L 445.6955,578.3435 L 448.1042,550.082 L 450.0391,527.5094 L 452.41,540.4665 L 454.3764,545.4247 L 456.1315,550.0667 L 460.941,598.3899 L 466.2625,566.4373 L 468.0888,529.5835 L 470.1935,542.2876 L 472.5447,554.0592 L 474.9101,569.2408 L 476.8278,527.3077 L 479.6563,546.5967 L 481.6147,613.1786 L 483.7448,564.1531 L 486.159,535.5795 L 488.7521,545.5406 L 494.2829,607.2246 L 497.0599,551.9599 L 498.991,536.1501 L 501.1412,546.8337 L 504.0357,591.103 L 507.6623,530.8879 L 509.5702,541.8642 L 511.5376,551.9428 L 515.4515,598.4872 L 519.7509,579.1895 L 521.9075,571.9115 L 524.4056,584.555 L 526.6493,592.612 L 528.6351,572.127 L 530.839,575.1908 L 532.82,584.9331 L 535.2431,588.9162 L 538.3168,570.602 L 540.8093,582.9374 L 542.9134,595.8213 L 544.7212,578.0846 L 546.8641,570.3329 L 550.2282,583.9242 L 554.8455,596.0379 L 558.0115,574.4735 L 559.8026,571.475 L 561.9354,581.706 L 564.932,588.7613 L 567.1033,567.5583 L 569.1623,576.2479 L 571.509,607.6932 L 573.4889,586.3764 L 575.4558,565.968 L 577.5694,576.6107 L 580.0977,610.4099 L 583.8889,589.5799 L 587.8041,569.3574 L 590.2208,577.6963 L 593.4158,593.5542 L 595.5292,571.0815 L 597.764,576.1462 L 600.4609,602.9436 L 602.2673,583.7017 L 605.2467,573.6374 L 607.4258,585.0881 L 609.2806,594.9895 L 611.586,571.0808 L 614.0312,577.2095 L 617.7785,604.7373 L 621.9622,586.8964 L 625.0704,570.6538 L 627.5762,583.8939 L 629.4712,595.0865 L 631.7598,573.416 L 633.9559,574.4469 L 636.1291,586.0081 L 638.3672,587.8974 L 640.8956,563.6284 L 642.8365,579.1027 L 644.7691,608.021 L 646.8958,587.0405 L 649.049,568.0815 L 651.5954,576.1658 L 655.0789,586.1715 L 660.6076,584.4445 L 662.575,564.9663 L 664.6472,579.0247 L 667.2961,596.2545 L 669.6418,571.4655 L 672.2666,579.0057 L 674.3754,605.0736 L 677.1071,575.7808 L 679.4974,575.3778 L 681.4723,585.5013 L 686.5846,587.3187 L 691.3535,571.9997 L 693.5026,584.0941 L 696.4927,585.4871 L 698.2563,567.1929 L 700.3129,578.7282 L 702.6317,600.9213 L 704.9663,577.0983 L 707.3516,575.5365 L 709.5007,610.3632 L 711.4945,586.6084 L 713.4481,566.2575 L 715.9221,580.6784 L 719.2406,601.9572 L 723.0702,588.6365 L 729.2095,571.7645 L 731.3641,584.0649 L 734.3347,582.1742 L 736.5018,571.6631 L 738.6388,584.171 L 741.4136,586.0205 L 744.3294,574.0943 L 746.4819,612.814 L 750.0614,571.2835 L 751.8913,576.1564 L 754.7119,605.2034 L 759.0603,581.5379 L 762.965,565.3609 L 765.2201,579.6198 L 767.3249,599.9907 L 769.4834,575.9569 L 772.0774,577.7623 L 774.1821,602.6107 L 776.875,572.2867 L 778.8907,576.6005 L 780.8402,607.7337 L 782.7586,589.8242 L 784.8973,568.9093 L 786.9721,577.6522 L 789.2663,602.0181 L 791.5523,576.6574 L 794.2086,577.6226 L 796.5622,605.7638 L 800.2869,587.4675 L 804.73,566.418 L 807.0721,581.0821 L 809.1613,596.5057 L 811.0879,575.0704 L 813.0966,576.2129 L 815.5792,600.9679 L 817.73,575.7308 L 819.7527,576.331 L 821.6778,607.1936 L 824.6789,574.2966 L 826.4951,576.3011 L 830.4225,600.3203 L 835.0155,582.3853 L 839.3655,569.6889 L 841.5744,584.458 L 843.4292,592.2863 L 845.521,568.2143 L 848.3789,586.6525 L 850.5649,585.0141 L 852.7443,574.0552 L 855.5727,599.373 L 857.9012,571.5158 L 860.1512,583.2131 L 862.3732,589.9952 L 864.6559,570.9094 L 867.0381,586.255 L 870.6411,587.7679 L 874.6161,568.0699 L 878.5075,586.1762 L 880.4874,589.4461 L 882.8039,574.891 L 885.0559,600.9515 L 887.5112,570.5444 L 889.7691,586.4078 L 892.0994,590.8241 L 894.3653,573.4973 L 896.4549,604.4212 L 898.227,583.2361 L 900.8324,584.6666 L 902.8284,589.9285 L 905.5567,583.7389 L 907.7497,590.3216 L 910.3069,582.6537 L 913.7087,586.4111 L 918.5348,588.4772 L 922.5647,596.2986 L 926.0456,584.0058 L 929.6209,588.5786 L 930.0,630.0 L 930.0,630.0 L 929.6209,582.1563 L 926.0456,576.2103 L 922.5647,591.0002 L 918.5348,580.4038 L 913.7087,579.1684 L 910.3069,573.4222 L 907.7497,583.8775 L 905.5567,574.6139 L 902.8284,583.4326 L 900.8324,575.5963 L 898.227,575.442 L 896.4549,600.7703 L 894.3653,562.8575 L 892.0994,584.5134 L 889.7691,577.4928 L 887.5112,560.3013 L 885.0559,596.5692 L 882.8039,564.2148 L 880.4874,582.843 L 878.5075,577.2707 L 874.6161,557.398 L 870.6411,580.8935 L 867.0381,577.2518 L 864.6559,559.9086 L 862.3732,583.4891 L 860.1512,573.7635 L 857.9012,561.5368 L 855.5727,594.6908 L 852.7443,563.1792 L 850.5649,577.6051 L 848.3789,577.6179 L 845.521,557.616 L 843.4292,586.2907 L 841.5744,575.1441 L 839.3655,558.5116 L 835.0155,574.4987 L 830.4225,595.8665 L 826.4951,565.7489 L 824.6789,564.8974 L 821.6778,603.8527 L 819.7527,565.7671 L 817.73,566.5635 L 815.5792,596.571 L 813.0966,565.6613 L 811.0879,565.8134 L 809.1613,591.3094 L 807.0721,571.227 L 804.73,555.5025 L 800.2869,580.5756 L 796.5622,602.3689 L 794.2086,567.2454 L 791.5523,567.6928 L 789.2663,597.856 L 786.9721,567.2953 L 784.8973,558.438 L 782.7586,583.313 L 780.8402,604.4168 L 778.8907,566.0504 L 776.875,562.5089 L 774.1821,598.5966 L 772.0774,567.4179 L 769.4834,566.8858 L 767.3249,595.4661 L 765.2201,569.5029 L 762.965,554.2624 L 759.0603,573.5207 L 754.7119,601.7013 L 751.8913,565.4947 L 750.0614,561.2943 L 746.4819,609.697 L 744.3294,563.2094 L 741.4136,578.7851 L 738.6388,574.6945 L 736.5018,560.3422 L 734.3347,574.2576 L 731.3641,574.5986 L 729.2095,560.4822 L 723.0702,581.9459 L 719.2406,597.8155 L 715.9221,570.7402 L 713.4481,555.2874 L 711.4945,579.5567 L 709.5007,607.1637 L 707.3516,564.8084 L 704.9663,568.2416 L 702.6317,596.5848 L 700.3129,568.4597 L 698.2563,556.3948 L 696.4927,578.1969 L 693.5026,574.654 L 691.3535,560.7692 L 686.5846,580.3736 L 681.4723,576.2661 L 679.4974,564.641 L 677.1071,566.6149 L 674.3754,601.465 L 672.2666,568.7525 L 669.6418,561.5433 L 667.2961,591.0458 L 664.6472,568.8385 L 662.575,553.7285 L 660.6076,576.9684 L 655.0789,576.9918 L 651.5954,565.5501 L 649.049,557.4979 L 646.8958,580.0231 L 644.7691,604.7428 L 642.8365,568.8743 L 640.8956,552.1164 L 638.3672,581.0135 L 636.1291,576.7971 L 633.9559,563.5387 L 631.7598,563.8374 L 629.4712,589.6335 L 627.5762,574.3991 L 625.0704,559.1724 L 621.9622,579.8747 L 617.7785,601.1492 L 614.0312,566.7382 L 611.586,561.058 L 609.2806,589.5124 L 607.4258,575.6947 L 605.2467,562.6103 L 602.2673,576.1133 L 600.4609,598.9923 L 597.764,565.5107 L 595.5292,561.1112 L 593.4158,587.7978 L 590.2208,567.3066 L 587.8041,559.0509 L 583.8889,583.0949 L 580.0977,607.225 L 577.5694,566.0052 L 575.4558,555.0307 L 573.4889,579.2169 L 571.509,604.4062 L 569.1623,565.6015 L 567.1033,556.8725 L 564.932,582.0903 L 561.9354,571.8444 L 559.8026,560.1248 L 558.0115,565.1319 L 554.8455,590.7767 L 550.2282,574.3907 L 546.8641,558.8333 L 544.7212,569.4198 L 542.9134,590.5251 L 540.8093,573.3128 L 538.3168,559.1556 L 535.2431,582.2985 L 532.82,575.5638 L 530.839,564.3533 L 528.6351,562.3653 L 526.6493,586.6951 L 524.4056,575.131 L 521.9075,560.6401 L 519.7509,570.726 L 515.4515,593.676 L 511.5376,536.9381 L 509.5702,526.9952 L 507.6623,516.1698 L 504.0357,585.8061 L 501.1412,531.9071 L 498.991,521.392 L 497.0599,540.9934 L 494.2829,603.7604 L 488.7521,530.6293 L 486.159,520.8388 L 483.7448,554.9515 L 481.6147,610.0842 L 479.6563,531.6649 L 476.8278,512.6538 L 474.9101,560.7123 L 472.5447,538.9736 L 470.1935,527.3726 L 468.0888,515.3213 L 466.2625,557.5442 L 460.941,594.1599 L 456.1315,535.1058 L 454.3764,530.536 L 452.41,525.6653 L 450.0391,512.8416 L 448.1042,538.8106 L 445.6955,571.1621 L 443.6055,603.6974 L 441.1065,535.6684 L 438.5766,528.7532 L 436.3737,521.6294 L 434.1707,529.8242 L 431.7902,579.4641 L 429.0389,535.4898 L 424.4777,524.8817 L 421.9063,520.7174 L 419.6752,573.633 L 417.3221,537.5398 L 415.1742,528.4086 L 413.0457,515.889 L 410.5207,562.5815 L 408.1842,540.2747 L 406.0921,531.9654 L 404.1017,525.3065 L 401.2855,532.1904 L 398.6933,591.1979 L 395.7268,538.3136 L 392.2899,530.0809 L 389.7126,520.0869 L 387.8095,547.3996 L 385.6954,605.6873 L 383.1835,531.4436 L 380.8915,521.3238 L 378.3631,545.297 L 375.3482,603.8644 L 373.2011,531.4728 L 371.456,523.2145 L 369.2274,538.3194 L 365.7528,588.5625 L 362.9163,535.9897 L 360.3282,524.1896 L 358.2206,536.6468 L 356.1588,592.4318 L 352.7005,527.8077 L 350.3042,528.4874 L 348.2024,587.1943 L 345.6822,532.4023 L 342.8979,517.0537 L 340.079,568.9592 L 336.1178,535.9521 L 334.1626,526.1525 L 332.0689,528.2937 L 329.6139,597.0556 L 327.4697,532.1875 L 325.3517,521.4142 L 322.9552,560.5745 L 321.1636,540.9026 L 316.6804,528.557 L 313.8323,522.9618 L 311.6042,577.7732 L 309.273,535.5087 L 306.2932,521.7486 L 303.9454,553.6388 L 301.084,537.5438 L 298.573,525.2773 L 296.6762,523.0293 L 294.42,581.442 L 291.5695,537.0322 L 288.4799,525.4502 L 286.4135,531.4921 L 283.8071,608.9173 L 281.831,530.8598 L 279.5955,514.018 L 277.3634,571.8498 L 275.0689,535.6531 L 273.1464,526.2896 L 271.0772,525.9523 L 269.0,569.865 L 266.3777,538.365 L 263.3394,527.61 L 261.5032,516.7766 L 259.3142,555.6006 L 257.0481,592.4533 L 254.7026,535.4325 L 252.0386,524.2253 L 249.6492,530.8879 L 247.945,566.3691 L 245.0875,534.2623 L 242.8595,521.7413 L 240.5253,550.7942 L 237.6196,540.7531 L 234.3029,531.2507 L 231.9877,523.6492 L 229.7175,544.4912 L 226.8727,539.9276 L 225.1122,530.9925 L 222.5646,522.6336 L 220.5154,575.9255 L 218.2187,536.4652 L 215.8168,523.1955 L 213.7918,540.9307 L 211.1581,541.7176 L 208.1028,531.3382 L 205.9408,521.5648 L 204.0998,547.0991 L 202.2474,598.0438 L 199.7518,530.8321 L 196.5647,535.6068 L 194.2909,571.8181 L 192.3246,540.2401 L 190.2262,528.5049 L 188.3708,522.5982 L 185.9213,585.7292 L 182.6602,532.9817 L 179.9098,530.7832 L 177.2029,606.872 L 175.5065,535.2367 L 172.4474,530.195 L 169.6388,541.2035 L 167.5347,528.413 L 165.3672,542.2263 L 163.0884,540.8972 L 160.6748,525.5355 L 158.3398,562.1443 L 155.2819,537.6802 L 152.8372,519.5344 L 150.5236,583.0858 L 148.4258,534.7933 L 146.2663,519.1421 L 144.1314,567.1185 L 142.1093,539.7248 L 140.0529,526.8125 L 136.8103,587.769 L 134.7958,534.4826 L 133.0004,518.3001 L 130.105,542.3084 L 128.0723,528.8907 L 125.5885,572.0136 L 123.705,539.1501 L 121.6822,520.3571 L 119.3788,602.4842 L 116.8316,528.456 L 114.5546,566.7141 L 112.6473,538.5959 L 110.2841,528.374 L 108.4908,599.0109 L 106.4886,534.1161 L 103.4994,547.1571 L 101.8501,534.4075 L 99.81278,587.027 L 97.67613,537.4341 L 95.15372,550.0255 L 92.6433,602.0805 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#bd9a53'>-<path d='M 90.0,630.0 L 92.6433,607.9259 L 95.15372,573.0649 L 97.67613,562.5921 L 99.81278,597.6894 L 101.8501,560.6959 L 103.4994,573.4113 L 106.4886,561.209 L 108.4908,606.6226 L 110.2841,554.6449 L 112.6473,566.1941 L 114.5546,582.8419 L 116.8316,556.4524 L 119.3788,609.4964 L 121.6822,549.0405 L 123.705,567.1794 L 125.5885,586.6521 L 128.0723,557.4399 L 130.105,570.7052 L 133.0004,547.5035 L 134.7958,563.1587 L 136.8103,598.2972 L 140.0529,555.6243 L 142.1093,568.4425 L 144.1314,583.1332 L 146.2663,548.7175 L 148.4258,563.8093 L 150.5236,594.8422 L 152.8372,549.0515 L 155.2819,566.6415 L 158.3398,579.4885 L 160.6748,554.7791 L 163.0884,570.0065 L 165.3672,564.7581 L 167.5347,557.5566 L 169.6388,570.3333 L 172.4474,555.9715 L 175.5065,564.4649 L 177.2029,613.0703 L 179.9098,556.319 L 182.6602,562.1807 L 185.9213,596.792 L 188.3708,550.284 L 190.2262,557.9249 L 192.3246,569.5113 L 194.2909,586.5785 L 196.5647,559.9174 L 199.7518,560.1916 L 202.2474,605.9414 L 204.0998,568.3393 L 205.9408,551.2175 L 208.1028,560.845 L 211.1581,571.0662 L 213.7918,563.8082 L 215.8168,552.7921 L 218.2187,565.9217 L 220.5154,589.6488 L 222.5646,550.2946 L 225.1122,560.4126 L 226.8727,569.2688 L 229.7175,566.3994 L 231.9877,553.28 L 234.3029,560.8501 L 237.6196,570.2935 L 240.5253,571.141 L 242.8595,551.4939 L 245.0875,563.872 L 247.945,582.5509 L 249.6492,556.3843 L 252.0386,553.9065 L 254.7026,565.0414 L 257.0481,601.6943 L 259.3142,574.6106 L 261.5032,546.8165 L 263.3394,557.3094 L 266.3777,567.9207 L 269.0,585.0746 L 271.0772,552.7439 L 273.1464,556.0583 L 275.0689,565.4006 L 277.3634,586.6488 L 279.5955,544.2753 L 281.831,560.7072 L 283.8071,614.8247 L 286.4135,556.9075 L 288.4799,555.2575 L 291.5695,566.6813 L 294.42,593.6826 L 296.6762,550.6064 L 298.573,555.0795 L 301.084,567.2702 L 303.9454,573.1484 L 306.2932,551.6857 L 309.273,565.3036 L 311.6042,590.9014 L 313.8323,550.482 L 316.6804,558.279 L 321.1636,570.4919 L 322.9552,578.2666 L 325.3517,551.398 L 327.4697,562.0393 L 329.6139,605.0852 L 332.0689,554.4531 L 334.1626,556.0699 L 336.1178,565.7711 L 340.079,584.5269 L 342.8979,546.1784 L 345.6822,562.2839 L 348.2024,597.8618 L 350.3042,554.5606 L 352.7005,557.7375 L 356.1588,601.7261 L 358.2206,560.6095 L 360.3282,554.1858 L 362.9163,565.8262 L 365.7528,598.8231 L 369.2274,561.7665 L 371.456,553.1677 L 373.2011,561.3975 L 375.3482,610.6965 L 378.3631,567.0842 L 380.8915,551.4418 L 383.1835,561.4259 L 385.6954,612.2225 L 387.8095,568.5093 L 389.7126,550.2202 L 392.2899,560.0858 L 395.7268,568.2223 L 398.6933,600.837 L 401.2855,557.3345 L 404.1017,555.4077 L 406.0921,561.9193 L 408.1842,570.2096 L 410.5207,579.8047 L 413.0457,546.2448 L 415.1742,558.4741 L 417.3221,567.5171 L 419.6752,587.9076 L 421.9063,548.9436 L 424.4777,554.9267 L 429.0389,565.4152 L 431.7902,592.205 L 434.1707,555.5394 L 436.3737,551.7488 L 438.5766,558.8114 L 441.1065,565.6128 L 443.6055,610.5674 L 445.6955,586.088 L 448.1042,562.2059 L 450.0391,543.2492 L 452.41,555.741 L 454.3764,560.5664 L 456.1315,565.0998 L 460.941,602.9553 L 466.2625,575.9999 L 468.0888,544.8901 L 470.1935,557.5599 L 472.5447,569.0304 L 474.9101,578.4373 L 476.8278,543.0424 L 479.6563,561.6823 L 481.6147,615.9354 L 483.7448,574.0884 L 486.159,550.9911 L 488.7521,560.6933 L 494.2829,610.6451 L 497.0599,563.7892 L 498.991,551.5406 L 501.1412,561.9835 L 504.0357,596.839 L 507.6623,546.5824 L 509.5702,557.1066 L 511.5376,566.9132 L 515.4515,602.9936 L 519.7509,586.6415 L 521.9075,581.7198 L 524.4056,593.8981 L 526.6493,598.0052 L 528.6351,580.6314 L 530.839,584.9357 L 532.82,594.2843 L 535.2431,594.8943 L 538.3168,580.4622 L 540.8093,592.2871 L 542.9134,600.7324 L 544.7212,585.6978 L 546.8641,580.231 L 550.2282,593.2869 L 554.8455,600.9111 L 558.0115,582.6205 L 559.8026,581.3111 L 561.9354,591.1709 L 564.932,594.7743 L 567.1033,576.808 L 569.1623,585.9221 L 571.509,610.9058 L 573.4889,592.787 L 575.4558,575.4096 L 577.5694,586.2557 L 580.0977,613.5014 L 583.8889,595.461 L 587.8041,578.3315 L 590.2208,587.2903 L 593.4158,598.8242 L 595.5292,579.7653 L 597.764,585.789 L 600.4609,606.752 L 602.2673,590.4361 L 605.2467,583.3925 L 607.4258,594.4524 L 609.2806,600.0436 L 611.586,579.8069 L 614.0312,586.7706 L 617.7785,608.2387 L 621.9622,593.1786 L 625.0704,580.5329 L 627.5762,593.2589 L 629.4712,600.107 L 631.7598,581.7578 L 633.9559,584.1568 L 636.1291,595.3016 L 638.3672,594.0666 L 640.8956,573.5542 L 642.8365,588.626 L 644.7691,611.2241 L 646.8958,593.3322 L 649.049,577.2525 L 651.5954,585.7722 L 655.0789,595.4234 L 660.6076,591.1081 L 662.575,574.677 L 664.6472,588.5166 L 667.2961,601.0693 L 669.6418,580.115 L 672.2666,588.5261 L 674.3754,608.5691 L 677.1071,583.8118 L 679.4974,585.0177 L 681.4723,594.7568 L 686.5846,593.5302 L 691.3535,581.7731 L 693.5026,593.3657 L 696.4927,592.0034 L 698.2563,576.571 L 700.3129,588.2369 L 702.6317,605.0323 L 704.9663,584.8865 L 707.3516,585.1596 L 709.5007,613.4532 L 711.4945,592.9402 L 713.4481,575.783 L 715.9221,590.0609 L 719.2406,605.9356 L 723.0702,594.6569 L 729.2095,581.5277 L 731.3641,593.3548 L 734.3347,589.1857 L 736.5018,581.4248 L 738.6388,593.4915 L 741.4136,592.48 L 744.3294,583.7509 L 746.4819,615.7757 L 750.0614,579.9841 L 751.8913,585.7788 L 754.7119,608.6355 L 759.0603,588.6712 L 762.965,574.9964 L 765.2201,589.0789 L 767.3249,604.2739 L 769.4834,583.9274 L 772.0774,587.2651 L 774.1821,606.4548 L 776.875,580.8071 L 778.8907,586.1288 L 780.8402,610.9732 L 782.7586,595.6805 L 784.8973,578.0219 L 786.9721,587.1185 L 789.2663,606.0045 L 791.5523,584.5587 L 794.2086,587.1014 L 796.5622,609.0989 L 800.2869,593.6614 L 804.73,575.9172 L 807.0721,590.404 L 809.1613,601.3454 L 811.0879,583.235 L 813.0966,585.7171 L 815.5792,605.149 L 817.73,583.7889 L 819.7527,585.8492 L 821.6778,610.4507 L 824.6789,582.5494 L 826.4951,585.7791 L 830.4225,604.5357 L 835.0155,589.4019 L 839.3655,579.4382 L 841.5744,593.5597 L 843.4292,597.794 L 845.521,577.4961 L 848.3789,595.744 L 850.5649,591.658 L 852.7443,583.596 L 855.5727,603.7984 L 857.9012,580.3075 L 860.1512,592.2995 L 862.3732,595.9055 L 864.6559,580.5727 L 867.0381,595.1941 L 870.6411,593.986 L 874.6161,577.4793 L 878.5075,594.976 L 880.4874,595.4329 L 882.8039,584.299 L 885.0559,605.1173 L 887.5112,579.5834 L 889.7691,595.2046 L 892.0994,596.5899 L 894.3653,582.9731 L 896.4549,607.9722 L 898.227,590.26 L 900.8324,593.4116 L 902.8284,595.8592 L 905.5567,592.3862 L 907.7497,596.2216 L 910.3069,591.215 L 913.7087,593.055 L 918.5348,596.3996 L 922.5647,601.2462 L 926.0456,591.2274 L 929.6209,594.6194 L 930.0,630.0 L 930.0,630.0 L 929.6209,588.5786 L 926.0456,584.0058 L 922.5647,596.2986 L 918.5348,588.4772 L 913.7087,586.4111 L 910.3069,582.6537 L 907.7497,590.3216 L 905.5567,583.7389 L 902.8284,589.9285 L 900.8324,584.6666 L 898.227,583.2361 L 896.4549,604.4212 L 894.3653,573.4973 L 892.0994,590.8241 L 889.7691,586.4078 L 887.5112,570.5444 L 885.0559,600.9515 L 882.8039,574.891 L 880.4874,589.4461 L 878.5075,586.1762 L 874.6161,568.0699 L 870.6411,587.7679 L 867.0381,586.255 L 864.6559,570.9094 L 862.3732,589.9952 L 860.1512,583.2131 L 857.9012,571.5158 L 855.5727,599.373 L 852.7443,574.0552 L 850.5649,585.0141 L 848.3789,586.6525 L 845.521,568.2143 L 843.4292,592.2863 L 841.5744,584.458 L 839.3655,569.6889 L 835.0155,582.3853 L 830.4225,600.3203 L 826.4951,576.3011 L 824.6789,574.2966 L 821.6778,607.1936 L 819.7527,576.331 L 817.73,575.7308 L 815.5792,600.9679 L 813.0966,576.2129 L 811.0879,575.0704 L 809.1613,596.5057 L 807.0721,581.0821 L 804.73,566.418 L 800.2869,587.4675 L 796.5622,605.7638 L 794.2086,577.6226 L 791.5523,576.6574 L 789.2663,602.0181 L 786.9721,577.6522 L 784.8973,568.9093 L 782.7586,589.8242 L 780.8402,607.7337 L 778.8907,576.6005 L 776.875,572.2867 L 774.1821,602.6107 L 772.0774,577.7623 L 769.4834,575.9569 L 767.3249,599.9907 L 765.2201,579.6198 L 762.965,565.3609 L 759.0603,581.5379 L 754.7119,605.2034 L 751.8913,576.1564 L 750.0614,571.2835 L 746.4819,612.814 L 744.3294,574.0943 L 741.4136,586.0205 L 738.6388,584.171 L 736.5018,571.6631 L 734.3347,582.1742 L 731.3641,584.0649 L 729.2095,571.7645 L 723.0702,588.6365 L 719.2406,601.9572 L 715.9221,580.6784 L 713.4481,566.2575 L 711.4945,586.6084 L 709.5007,610.3632 L 707.3516,575.5365 L 704.9663,577.0983 L 702.6317,600.9213 L 700.3129,578.7282 L 698.2563,567.1929 L 696.4927,585.4871 L 693.5026,584.0941 L 691.3535,571.9997 L 686.5846,587.3187 L 681.4723,585.5013 L 679.4974,575.3778 L 677.1071,575.7808 L 674.3754,605.0736 L 672.2666,579.0057 L 669.6418,571.4655 L 667.2961,596.2545 L 664.6472,579.0247 L 662.575,564.9663 L 660.6076,584.4445 L 655.0789,586.1715 L 651.5954,576.1658 L 649.049,568.0815 L 646.8958,587.0405 L 644.7691,608.021 L 642.8365,579.1027 L 640.8956,563.6284 L 638.3672,587.8974 L 636.1291,586.0081 L 633.9559,574.4469 L 631.7598,573.416 L 629.4712,595.0865 L 627.5762,583.8939 L 625.0704,570.6538 L 621.9622,586.8964 L 617.7785,604.7373 L 614.0312,577.2095 L 611.586,571.0808 L 609.2806,594.9895 L 607.4258,585.0881 L 605.2467,573.6374 L 602.2673,583.7017 L 600.4609,602.9436 L 597.764,576.1462 L 595.5292,571.0815 L 593.4158,593.5542 L 590.2208,577.6963 L 587.8041,569.3574 L 583.8889,589.5799 L 580.0977,610.4099 L 577.5694,576.6107 L 575.4558,565.968 L 573.4889,586.3764 L 571.509,607.6932 L 569.1623,576.2479 L 567.1033,567.5583 L 564.932,588.7613 L 561.9354,581.706 L 559.8026,571.475 L 558.0115,574.4735 L 554.8455,596.0379 L 550.2282,583.9242 L 546.8641,570.3329 L 544.7212,578.0846 L 542.9134,595.8213 L 540.8093,582.9374 L 538.3168,570.602 L 535.2431,588.9162 L 532.82,584.9331 L 530.839,575.1908 L 528.6351,572.127 L 526.6493,592.612 L 524.4056,584.555 L 521.9075,571.9115 L 519.7509,579.1895 L 515.4515,598.4872 L 511.5376,551.9428 L 509.5702,541.8642 L 507.6623,530.8879 L 504.0357,591.103 L 501.1412,546.8337 L 498.991,536.1501 L 497.0599,551.9599 L 494.2829,607.2246 L 488.7521,545.5406 L 486.159,535.5795 L 483.7448,564.1531 L 481.6147,613.1786 L 479.6563,546.5967 L 476.8278,527.3077 L 474.9101,569.2408 L 472.5447,554.0592 L 470.1935,542.2876 L 468.0888,529.5835 L 466.2625,566.4373 L 460.941,598.3899 L 456.1315,550.0667 L 454.3764,545.4247 L 452.41,540.4665 L 450.0391,527.5094 L 448.1042,550.082 L 445.6955,578.3435 L 443.6055,607.147 L 441.1065,550.6446 L 438.5766,543.6193 L 436.3737,536.3759 L 434.1707,542.2019 L 431.7902,585.583 L 429.0389,550.4084 L 424.4777,539.6522 L 421.9063,534.313 L 419.6752,580.4906 L 417.3221,552.5452 L 415.1742,543.2652 L 413.0457,530.5888 L 410.5207,570.8759 L 408.1842,555.3341 L 406.0921,546.8643 L 404.1017,540.1478 L 401.2855,544.3026 L 398.6933,595.834 L 395.7268,553.3132 L 392.2899,544.9594 L 389.7126,534.7882 L 387.8095,557.5479 L 385.6954,609.0362 L 383.1835,546.3279 L 380.8915,536.0484 L 378.3631,555.7829 L 375.3482,607.33 L 373.2011,546.341 L 371.456,537.9078 L 369.2274,549.601 L 365.7528,593.486 L 362.9163,550.9163 L 360.3282,538.9142 L 358.2206,548.161 L 356.1588,596.882 L 352.7005,542.5994 L 350.3042,541.0335 L 348.2024,592.3104 L 345.6822,547.2676 L 342.8979,531.0746 L 340.079,576.4426 L 336.1178,550.8693 L 334.1626,540.8815 L 332.0689,540.8691 L 329.6139,600.9559 L 327.4697,547.0317 L 325.3517,536.0732 L 322.9552,569.0708 L 321.1636,555.8066 L 316.6804,543.2284 L 313.8323,536.1782 L 311.6042,584.0693 L 309.273,550.3806 L 306.2932,536.3886 L 303.9454,563.0125 L 301.084,552.4442 L 298.573,539.9239 L 296.6762,536.2821 L 294.42,587.3129 L 291.5695,551.8553 L 288.4799,540.0895 L 286.4135,543.7064 L 283.8071,612.0657 L 281.831,545.6639 L 279.5955,528.5807 L 277.3634,578.9452 L 275.0689,550.5367 L 273.1464,540.9632 L 271.0772,538.8165 L 269.0,577.1551 L 266.3777,553.1815 L 263.3394,542.2566 L 261.5032,531.2868 L 259.3142,564.7191 L 257.0481,596.8824 L 254.7026,550.1928 L 252.0386,538.7771 L 249.6492,543.1394 L 247.945,574.1267 L 245.0875,549.0365 L 242.8595,536.2785 L 240.5253,560.5515 L 237.6196,555.628 L 234.3029,545.9534 L 231.9877,538.1732 L 229.7175,555.0092 L 226.8727,554.6908 L 225.1122,545.553 L 222.5646,535.9076 L 220.5154,582.4863 L 218.2187,551.1803 L 215.8168,537.6882 L 213.7918,551.9082 L 211.1581,556.505 L 208.1028,545.9651 L 205.9408,536.0313 L 204.0998,557.2758 L 202.2474,601.8989 L 199.7518,545.3802 L 196.5647,547.2727 L 194.2909,578.8799 L 192.3246,554.9778 L 190.2262,543.0296 L 188.3708,535.9007 L 185.9213,591.0173 L 182.6602,547.4758 L 179.9098,543.0362 L 177.2029,610.1531 L 175.5065,549.8089 L 172.4474,542.5589 L 169.6388,555.8829 L 167.5347,542.7948 L 165.3672,553.0229 L 163.0884,555.5503 L 160.6748,539.8889 L 158.3398,570.4539 L 155.2819,552.1773 L 152.8372,533.7821 L 150.5236,588.6985 L 148.4258,549.224 L 146.2663,533.3956 L 144.1314,574.7696 L 142.1093,554.1672 L 140.0529,540.9435 L 136.8103,592.7764 L 134.7958,548.7186 L 133.0004,532.3093 L 130.105,556.6545 L 128.0723,542.9049 L 125.5885,578.9901 L 123.705,553.1454 L 121.6822,534.076 L 119.3788,606.0862 L 116.8316,542.1486 L 114.5546,574.3915 L 112.6473,552.4074 L 110.2841,540.8786 L 108.4908,602.8477 L 106.4886,547.4456 L 103.4994,560.4793 L 101.8501,547.2716 L 99.81278,592.0314 L 97.67613,549.7104 L 95.15372,561.555 L 92.6433,605.6089 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5d01a8'>-<path d='M 90.0,630.0 L 92.6433,612.2944 L 95.15372,584.9835 L 97.67613,572.9737 L 99.81278,602.5575 L 101.8501,571.9107 L 103.4994,587.6053 L 106.4886,572.9999 L 108.4908,610.3001 L 110.2841,566.6255 L 112.6473,579.7099 L 114.5546,590.4029 L 116.8316,568.134 L 119.3788,612.6689 L 121.6822,562.075 L 123.705,580.7189 L 125.5885,593.5951 L 128.0723,569.6484 L 130.105,585.3605 L 133.0004,560.9956 L 134.7958,576.3865 L 136.8103,603.375 L 140.0529,567.9988 L 142.1093,582.7441 L 144.1314,590.8055 L 146.2663,561.7519 L 148.4258,577.3652 L 150.5236,600.5563 L 152.8372,562.0786 L 155.2819,580.7499 L 158.3398,587.8919 L 160.6748,567.3376 L 163.0884,584.5506 L 165.3672,575.5791 L 167.5347,570.5674 L 169.6388,585.0086 L 172.4474,568.3714 L 175.5065,578.2743 L 177.2029,615.4169 L 179.9098,568.626 L 182.6602,575.6254 L 185.9213,602.2398 L 188.3708,563.6959 L 190.2262,571.0122 L 192.3246,584.1721 L 194.2909,593.7639 L 196.5647,571.6737 L 199.7518,573.5706 L 202.2474,609.7994 L 204.0998,578.5897 L 205.9408,563.4388 L 208.1028,574.3189 L 211.1581,585.8437 L 213.7918,574.8881 L 215.8168,565.3306 L 218.2187,579.9243 L 220.5154,596.3292 L 222.5646,563.6682 L 225.1122,573.7497 L 226.8727,583.8622 L 229.7175,577.08 L 231.9877,565.8769 L 234.3029,574.4389 L 237.6196,585.0108 L 240.5253,581.0048 L 242.8595,563.9158 L 245.0875,577.9129 L 247.945,590.4747 L 249.6492,568.8006 L 252.0386,566.5361 L 254.7026,578.9419 L 257.0481,606.371 L 259.3142,583.8782 L 261.5032,560.46 L 263.3394,570.4386 L 266.3777,582.2971 L 269.0,592.5409 L 271.0772,565.7492 L 273.1464,569.182 L 275.0689,579.6421 L 277.3634,593.9273 L 279.5955,558.6827 L 281.831,574.3269 L 283.8071,616.5349 L 286.4135,569.2947 L 288.4799,568.0841 L 291.5695,580.8935 L 294.42,599.7795 L 296.6762,564.0583 L 298.573,568.0301 L 301.084,581.7505 L 303.9454,582.7387 L 306.2932,564.2461 L 309.273,579.4211 L 311.6042,597.4232 L 313.8323,563.8775 L 316.6804,571.4994 L 321.1636,585.3022 L 322.9552,586.9672 L 325.3517,563.9238 L 327.4697,575.8431 L 329.6139,609.2605 L 332.0689,567.2432 L 334.1626,569.15 L 336.1178,580.0508 L 340.079,592.2429 L 342.8979,560.449 L 345.6822,576.1717 L 348.2024,603.2222 L 350.3042,567.369 L 352.7005,571.1019 L 356.1588,606.41 L 358.2206,572.3458 L 360.3282,567.0415 L 362.9163,580.1442 L 365.7528,604.0048 L 369.2274,573.3278 L 371.456,565.9797 L 373.2011,575.1722 L 375.3482,613.5025 L 378.3631,577.8323 L 380.8915,564.0186 L 383.1835,575.1751 L 385.6954,614.6949 L 387.8095,578.8909 L 389.7126,562.591 L 392.2899,573.742 L 395.7268,582.7828 L 398.6933,605.7689 L 401.2855,569.7527 L 404.1017,568.619 L 406.0921,575.7815 L 408.1842,584.9744 L 410.5207,588.3922 L 413.0457,559.9629 L 415.1742,571.8568 L 417.3221,581.9208 L 419.6752,595.0001 L 421.9063,562.8331 L 424.4777,567.9193 L 429.0389,579.4889 L 431.7902,598.5609 L 434.1707,568.2092 L 436.3737,564.3639 L 438.5766,572.2943 L 441.1065,579.9345 L 443.6055,613.3624 L 445.6955,593.5542 L 448.1042,573.7945 L 450.0391,558.023 L 452.41,568.77 L 454.3764,574.2062 L 456.1315,579.1771 L 460.941,607.4988 L 466.2625,585.2183 L 468.0888,559.5108 L 470.1935,570.9243 L 472.5447,583.651 L 474.9101,587.2345 L 476.8278,557.9147 L 479.6563,575.6138 L 481.6147,617.2719 L 483.7448,583.5529 L 486.159,563.5952 L 488.7521,574.406 L 494.2829,613.5167 L 497.0599,575.0332 L 498.991,564.2177 L 501.1412,575.7418 L 504.0357,602.4018 L 507.6623,560.1766 L 509.5702,570.5003 L 511.5376,581.3278 L 515.4515,608.6748 L 519.7509,597.0286 L 521.9075,592.4078 L 524.4056,601.1656 L 526.6493,605.1268 L 528.6351,592.674 L 530.839,594.6609 L 532.82,601.4278 L 535.2431,602.8619 L 538.3168,591.4728 L 540.8093,600.0268 L 542.9134,607.0135 L 544.7212,596.3201 L 546.8641,591.2307 L 550.2282,600.7149 L 554.8455,607.1739 L 558.0115,594.138 L 559.8026,592.1211 L 561.9354,599.1987 L 564.932,602.8313 L 567.1033,590.0102 L 569.1623,595.3975 L 571.509,614.246 L 573.4889,601.4584 L 575.4558,588.9618 L 577.5694,595.6838 L 580.0977,615.8114 L 583.8889,603.2463 L 587.8041,591.0068 L 590.2208,596.2971 L 593.4158,605.7179 L 595.5292,592.0431 L 597.764,595.3264 L 600.4609,611.3375 L 602.2673,599.6946 L 605.2467,593.6064 L 607.4258,601.5321 L 609.2806,606.5508 L 611.586,592.123 L 614.0312,596.0255 L 617.7785,612.3939 L 621.9622,601.7024 L 625.0704,591.5162 L 627.5762,600.6248 L 629.4712,606.6142 L 631.7598,593.5688 L 633.9559,594.1428 L 636.1291,602.148 L 638.3672,602.3879 L 640.8956,587.7264 L 642.8365,597.3904 L 644.7691,614.3237 L 646.8958,601.8139 L 649.049,590.3125 L 651.5954,595.337 L 655.0789,602.2424 L 660.6076,600.1825 L 662.575,588.5209 L 664.6472,597.2828 L 667.2961,607.2739 L 669.6418,592.2798 L 672.2666,597.274 L 674.3754,612.7717 L 677.1071,595.0194 L 679.4974,594.7558 L 681.4723,601.7053 L 686.5846,601.9572 L 691.3535,592.3662 L 693.5026,600.8155 L 696.4927,600.8261 L 698.2563,589.806 L 700.3129,597.0778 L 702.6317,610.0973 L 704.9663,595.6874 L 707.3516,594.8137 L 709.5007,615.6557 L 711.4945,601.4456 L 713.4481,589.2276 L 715.9221,598.3968 L 719.2406,610.7253 L 723.0702,602.7212 L 729.2095,592.2484 L 731.3641,600.7845 L 734.3347,598.807 L 736.5018,592.2003 L 738.6388,600.8575 L 741.4136,601.2407 L 744.3294,593.757 L 746.4819,617.0374 L 750.0614,592.1926 L 751.8913,595.2415 L 754.7119,612.6557 L 759.0603,598.349 L 762.965,588.5924 L 765.2201,597.6445 L 767.3249,609.5376 L 769.4834,594.9709 L 772.0774,596.3522 L 774.1821,611.1224 L 776.875,592.7896 L 778.8907,595.5715 L 780.8402,614.153 L 782.7586,603.5205 L 784.8973,590.7865 L 786.9721,596.2512 L 789.2663,610.8051 L 791.5523,595.4034 L 794.2086,596.2268 L 796.5622,612.9806 L 800.2869,601.9244 L 804.73,589.185 L 807.0721,598.6251 L 809.1613,607.4332 L 811.0879,594.4061 L 813.0966,595.2236 L 815.5792,610.2104 L 817.73,594.8706 L 819.7527,595.3009 L 821.6778,613.8201 L 824.6789,593.9211 L 826.4951,595.2728 L 830.4225,609.6919 L 835.0155,598.8592 L 839.3655,591.0779 L 841.5744,600.9238 L 843.4292,604.8208 L 845.521,590.2552 L 848.3789,602.4627 L 850.5649,600.4753 L 852.7443,593.6312 L 855.5727,609.1879 L 857.9012,592.2207 L 860.1512,599.9827 L 862.3732,603.5668 L 864.6559,591.8604 L 867.0381,602.106 L 870.6411,602.0685 L 874.6161,590.0835 L 878.5075,601.9718 L 880.4874,603.1763 L 882.8039,593.9933 L 885.0559,610.0984 L 887.5112,591.6241 L 889.7691,602.0783 L 892.0994,603.9194 L 894.3653,593.2946 L 896.4549,612.0927 L 898.227,599.2833 L 900.8324,600.7484 L 902.8284,603.2926 L 905.5567,599.9145 L 907.7497,603.4654 L 910.3069,598.9365 L 913.7087,601.0354 L 918.5348,602.9433 L 922.5647,606.984 L 926.0456,599.4266 L 929.6209,602.5888 L 930.0,630.0 L 930.0,630.0 L 929.6209,594.6194 L 926.0456,591.2274 L 922.5647,601.2462 L 918.5348,596.3996 L 913.7087,593.055 L 910.3069,591.215 L 907.7497,596.2216 L 905.5567,592.3862 L 902.8284,595.8592 L 900.8324,593.4116 L 898.227,590.26 L 896.4549,607.9722 L 894.3653,582.9731 L 892.0994,596.5899 L 889.7691,595.2046 L 887.5112,579.5834 L 885.0559,605.1173 L 882.8039,584.299 L 880.4874,595.4329 L 878.5075,594.976 L 874.6161,577.4793 L 870.6411,593.986 L 867.0381,595.1941 L 864.6559,580.5727 L 862.3732,595.9055 L 860.1512,592.2995 L 857.9012,580.3075 L 855.5727,603.7984 L 852.7443,583.596 L 850.5649,591.658 L 848.3789,595.744 L 845.521,577.4961 L 843.4292,597.794 L 841.5744,593.5597 L 839.3655,579.4382 L 835.0155,589.4019 L 830.4225,604.5357 L 826.4951,585.7791 L 824.6789,582.5494 L 821.6778,610.4507 L 819.7527,585.8492 L 817.73,583.7889 L 815.5792,605.149 L 813.0966,585.7171 L 811.0879,583.235 L 809.1613,601.3454 L 807.0721,590.404 L 804.73,575.9172 L 800.2869,593.6614 L 796.5622,609.0989 L 794.2086,587.1014 L 791.5523,584.5587 L 789.2663,606.0045 L 786.9721,587.1185 L 784.8973,578.0219 L 782.7586,595.6805 L 780.8402,610.9732 L 778.8907,586.1288 L 776.875,580.8071 L 774.1821,606.4548 L 772.0774,587.2651 L 769.4834,583.9274 L 767.3249,604.2739 L 765.2201,589.0789 L 762.965,574.9964 L 759.0603,588.6712 L 754.7119,608.6355 L 751.8913,585.7788 L 750.0614,579.9841 L 746.4819,615.7757 L 744.3294,583.7509 L 741.4136,592.48 L 738.6388,593.4915 L 736.5018,581.4248 L 734.3347,589.1857 L 731.3641,593.3548 L 729.2095,581.5277 L 723.0702,594.6569 L 719.2406,605.9356 L 715.9221,590.0609 L 713.4481,575.783 L 711.4945,592.9402 L 709.5007,613.4532 L 707.3516,585.1596 L 704.9663,584.8865 L 702.6317,605.0323 L 700.3129,588.2369 L 698.2563,576.571 L 696.4927,592.0034 L 693.5026,593.3657 L 691.3535,581.7731 L 686.5846,593.5302 L 681.4723,594.7568 L 679.4974,585.0177 L 677.1071,583.8118 L 674.3754,608.5691 L 672.2666,588.5261 L 669.6418,580.115 L 667.2961,601.0693 L 664.6472,588.5166 L 662.575,574.677 L 660.6076,591.1081 L 655.0789,595.4234 L 651.5954,585.7722 L 649.049,577.2525 L 646.8958,593.3322 L 644.7691,611.2241 L 642.8365,588.626 L 640.8956,573.5542 L 638.3672,594.0666 L 636.1291,595.3016 L 633.9559,584.1568 L 631.7598,581.7578 L 629.4712,600.107 L 627.5762,593.2589 L 625.0704,580.5329 L 621.9622,593.1786 L 617.7785,608.2387 L 614.0312,586.7706 L 611.586,579.8069 L 609.2806,600.0436 L 607.4258,594.4524 L 605.2467,583.3925 L 602.2673,590.4361 L 600.4609,606.752 L 597.764,585.789 L 595.5292,579.7653 L 593.4158,598.8242 L 590.2208,587.2903 L 587.8041,578.3315 L 583.8889,595.461 L 580.0977,613.5014 L 577.5694,586.2557 L 575.4558,575.4096 L 573.4889,592.787 L 571.509,610.9058 L 569.1623,585.9221 L 567.1033,576.808 L 564.932,594.7743 L 561.9354,591.1709 L 559.8026,581.3111 L 558.0115,582.6205 L 554.8455,600.9111 L 550.2282,593.2869 L 546.8641,580.231 L 544.7212,585.6978 L 542.9134,600.7324 L 540.8093,592.2871 L 538.3168,580.4622 L 535.2431,594.8943 L 532.82,594.2843 L 530.839,584.9357 L 528.6351,580.6314 L 526.6493,598.0052 L 524.4056,593.8981 L 521.9075,581.7198 L 519.7509,586.6415 L 515.4515,602.9936 L 511.5376,566.9132 L 509.5702,557.1066 L 507.6623,546.5824 L 504.0357,596.839 L 501.1412,561.9835 L 498.991,551.5406 L 497.0599,563.7892 L 494.2829,610.6451 L 488.7521,560.6933 L 486.159,550.9911 L 483.7448,574.0884 L 481.6147,615.9354 L 479.6563,561.6823 L 476.8278,543.0424 L 474.9101,578.4373 L 472.5447,569.0304 L 470.1935,557.5599 L 468.0888,544.8901 L 466.2625,575.9999 L 460.941,602.9553 L 456.1315,565.0998 L 454.3764,560.5664 L 452.41,555.741 L 450.0391,543.2492 L 448.1042,562.2059 L 445.6955,586.088 L 443.6055,610.5674 L 441.1065,565.6128 L 438.5766,558.8114 L 436.3737,551.7488 L 434.1707,555.5394 L 431.7902,592.205 L 429.0389,565.4152 L 424.4777,554.9267 L 421.9063,548.9436 L 419.6752,587.9076 L 417.3221,567.5171 L 415.1742,558.4741 L 413.0457,546.2448 L 410.5207,579.8047 L 408.1842,570.2096 L 406.0921,561.9193 L 404.1017,555.4077 L 401.2855,557.3345 L 398.6933,600.837 L 395.7268,568.2223 L 392.2899,560.0858 L 389.7126,550.2202 L 387.8095,568.5093 L 385.6954,612.2225 L 383.1835,561.4259 L 380.8915,551.4418 L 378.3631,567.0842 L 375.3482,610.6965 L 373.2011,561.3975 L 371.456,553.1677 L 369.2274,561.7665 L 365.7528,598.8231 L 362.9163,565.8262 L 360.3282,554.1858 L 358.2206,560.6095 L 356.1588,601.7261 L 352.7005,557.7375 L 350.3042,554.5606 L 348.2024,597.8618 L 345.6822,562.2839 L 342.8979,546.1784 L 340.079,584.5269 L 336.1178,565.7711 L 334.1626,556.0699 L 332.0689,554.4531 L 329.6139,605.0852 L 327.4697,562.0393 L 325.3517,551.398 L 322.9552,578.2666 L 321.1636,570.4919 L 316.6804,558.279 L 313.8323,550.482 L 311.6042,590.9014 L 309.273,565.3036 L 306.2932,551.6857 L 303.9454,573.1484 L 301.084,567.2702 L 298.573,555.0795 L 296.6762,550.6064 L 294.42,593.6826 L 291.5695,566.6813 L 288.4799,555.2575 L 286.4135,556.9075 L 283.8071,614.8247 L 281.831,560.7072 L 279.5955,544.2753 L 277.3634,586.6488 L 275.0689,565.4006 L 273.1464,556.0583 L 271.0772,552.7439 L 269.0,585.0746 L 266.3777,567.9207 L 263.3394,557.3094 L 261.5032,546.8165 L 259.3142,574.6106 L 257.0481,601.6943 L 254.7026,565.0414 L 252.0386,553.9065 L 249.6492,556.3843 L 247.945,582.5509 L 245.0875,563.872 L 242.8595,551.4939 L 240.5253,571.141 L 237.6196,570.2935 L 234.3029,560.8501 L 231.9877,553.28 L 229.7175,566.3994 L 226.8727,569.2688 L 225.1122,560.4126 L 222.5646,550.2946 L 220.5154,589.6488 L 218.2187,565.9217 L 215.8168,552.7921 L 213.7918,563.8082 L 211.1581,571.0662 L 208.1028,560.845 L 205.9408,551.2175 L 204.0998,568.3393 L 202.2474,605.9414 L 199.7518,560.1916 L 196.5647,559.9174 L 194.2909,586.5785 L 192.3246,569.5113 L 190.2262,557.9249 L 188.3708,550.284 L 185.9213,596.792 L 182.6602,562.1807 L 179.9098,556.319 L 177.2029,613.0703 L 175.5065,564.4649 L 172.4474,555.9715 L 169.6388,570.3333 L 167.5347,557.5566 L 165.3672,564.7581 L 163.0884,570.0065 L 160.6748,554.7791 L 158.3398,579.4885 L 155.2819,566.6415 L 152.8372,549.0515 L 150.5236,594.8422 L 148.4258,563.8093 L 146.2663,548.7175 L 144.1314,583.1332 L 142.1093,568.4425 L 140.0529,555.6243 L 136.8103,598.2972 L 134.7958,563.1587 L 133.0004,547.5035 L 130.105,570.7052 L 128.0723,557.4399 L 125.5885,586.6521 L 123.705,567.1794 L 121.6822,549.0405 L 119.3788,609.4964 L 116.8316,556.4524 L 114.5546,582.8419 L 112.6473,566.1941 L 110.2841,554.6449 L 108.4908,606.6226 L 106.4886,561.209 L 103.4994,573.4113 L 101.8501,560.6959 L 99.81278,597.6894 L 97.67613,562.5921 L 95.15372,573.0649 L 92.6433,607.9259 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#7e1593'>-<path d='M 90.0,630.0 L 92.6433,613.1105 L 95.15372,599.9291 L 97.67613,588.7507 L 99.81278,606.8939 L 101.8501,588.1122 L 103.4994,603.8068 L 106.4886,589.4005 L 108.4908,612.0351 L 110.2841,581.8205 L 112.6473,596.3555 L 114.5546,598.2553 L 116.8316,584.8759 L 119.3788,613.8372 L 121.6822,578.8628 L 123.705,597.5067 L 125.5885,600.336 L 128.0723,586.5938 L 130.105,602.3059 L 133.0004,577.976 L 134.7958,593.3668 L 136.8103,607.2432 L 140.0529,585.0338 L 142.1093,599.7792 L 144.1314,598.4085 L 146.2663,578.8592 L 148.4258,594.4724 L 150.5236,605.1924 L 152.8372,579.1903 L 155.2819,597.8615 L 158.3398,596.416 L 160.6748,584.4952 L 163.0884,601.7082 L 165.3672,587.6673 L 167.5347,587.7249 L 169.6388,602.1662 L 172.4474,582.7416 L 175.5065,595.4821 L 177.2029,615.8457 L 179.9098,582.8364 L 182.6602,592.7939 L 185.9213,606.3772 L 188.3708,579.3963 L 190.2262,588.2092 L 192.3246,601.3691 L 194.2909,600.4545 L 196.5647,585.0024 L 199.7518,590.7654 L 202.2474,611.6876 L 204.0998,589.7611 L 205.9408,580.7014 L 208.1028,591.5815 L 211.1581,603.1063 L 213.7918,587.1491 L 215.8168,582.5713 L 218.2187,597.165 L 220.5154,602.2694 L 222.5646,579.362 L 225.1122,590.9816 L 226.8727,601.0941 L 229.7175,588.6781 L 231.9877,583.1263 L 234.3029,591.6883 L 237.6196,602.2603 L 240.5253,591.5395 L 242.8595,581.2243 L 245.0875,595.2214 L 247.945,598.0755 L 249.6492,582.8317 L 252.0386,583.8075 L 254.7026,596.2133 L 257.0481,609.1781 L 259.3142,593.4656 L 261.5032,577.7488 L 263.3394,587.7275 L 266.3777,599.5859 L 269.0,599.4678 L 271.0772,580.7014 L 273.1464,586.4993 L 275.0689,596.9593 L 277.3634,600.5566 L 279.5955,576.0109 L 281.831,591.6551 L 283.8071,616.6662 L 286.4135,583.2689 L 288.4799,585.397 L 291.5695,598.2064 L 294.42,604.6608 L 296.6762,579.5925 L 298.573,585.3561 L 301.084,599.0765 L 303.9454,592.6324 L 306.2932,581.5897 L 309.273,596.7646 L 311.6042,602.9104 L 313.8323,579.346 L 316.6804,588.797 L 321.1636,602.5998 L 322.9552,595.5613 L 325.3517,581.2761 L 327.4697,593.1954 L 329.6139,611.199 L 332.0689,581.7403 L 334.1626,586.5132 L 336.1178,597.4141 L 340.079,599.3733 L 342.8979,576.9546 L 345.6822,593.524 L 348.2024,607.0029 L 350.3042,581.7873 L 352.7005,588.4673 L 356.1588,609.2324 L 358.2206,585.3135 L 360.3282,584.4135 L 362.9163,597.5162 L 365.7528,607.4682 L 369.2274,585.9148 L 371.456,583.3254 L 373.2011,592.5179 L 375.3482,614.3776 L 378.3631,589.2357 L 380.8915,581.4103 L 383.1835,592.5668 L 385.6954,615.3512 L 387.8095,589.8698 L 389.7126,579.9826 L 392.2899,591.1337 L 395.7268,600.1745 L 398.6933,608.8189 L 401.2855,583.495 L 404.1017,585.991 L 406.0921,593.1535 L 408.1842,602.3463 L 410.5207,596.6581 L 413.0457,577.348 L 415.1742,589.2419 L 417.3221,599.3059 L 419.6752,601.2137 L 421.9063,578.7282 L 424.4777,585.2978 L 429.0389,596.8674 L 431.7902,603.72 L 434.1707,582.3518 L 436.3737,581.7337 L 438.5766,589.6641 L 441.1065,597.3043 L 443.6055,614.2967 L 445.6955,600.2164 L 448.1042,586.3072 L 450.0391,575.395 L 452.41,586.142 L 454.3764,591.5782 L 456.1315,596.5491 L 460.941,609.9559 L 466.2625,594.3331 L 468.0888,576.292 L 470.1935,588.3226 L 472.5447,601.0493 L 474.9101,595.8351 L 476.8278,575.2998 L 479.6563,592.9989 L 481.6147,617.3331 L 483.7448,593.136 L 486.159,581.0 L 488.7521,591.8108 L 494.2829,614.4706 L 497.0599,587.1345 L 498.991,581.6115 L 501.1412,593.1356 L 504.0357,606.3794 L 507.6623,577.5858 L 509.5702,587.9094 L 511.5376,598.737 L 515.4515,610.8562 L 519.7509,602.7544 L 521.9075,601.0981 L 524.4056,609.8559 L 526.6493,608.3933 L 528.6351,599.6512 L 530.839,603.3688 L 532.82,610.1356 L 535.2431,606.8111 L 538.3168,600.1566 L 540.8093,608.7106 L 542.9134,609.6806 L 544.7212,602.2318 L 546.8641,599.8992 L 550.2282,609.3834 L 554.8455,609.7907 L 558.0115,600.6952 L 559.8026,600.8159 L 561.9354,607.8934 L 564.932,606.833 L 567.1033,597.8757 L 569.1623,604.0901 L 571.509,614.8761 L 573.4889,605.9458 L 575.4558,597.0593 L 577.5694,604.3763 L 580.0977,616.179 L 583.8889,607.0707 L 587.8041,598.5441 L 590.2208,604.9766 L 593.4158,608.8444 L 595.5292,599.2326 L 597.764,604.0146 L 600.4609,612.7072 L 602.2673,604.5649 L 605.2467,602.288 L 607.4258,610.2137 L 609.2806,609.3994 L 611.586,599.3584 L 614.0312,604.7115 L 617.7785,613.4091 L 621.9622,606.0388 L 625.0704,600.2 L 627.5762,609.3086 L 629.4712,609.4454 L 631.7598,600.382 L 633.9559,602.8441 L 636.1291,610.8493 L 638.3672,606.5996 L 640.8956,596.408 L 642.8365,606.072 L 644.7691,614.9166 L 646.8958,606.1569 L 649.049,598.1036 L 651.5954,604.0099 L 655.0789,610.9153 L 660.6076,604.9762 L 662.575,596.9159 L 664.6472,605.9425 L 667.2961,609.8731 L 669.6418,599.4233 L 672.2666,605.9316 L 674.3754,613.8263 L 677.1071,601.4431 L 679.4974,603.4308 L 681.4723,610.3803 L 686.5846,606.2215 L 691.3535,601.0259 L 693.5026,609.4753 L 696.4927,605.4491 L 698.2563,597.8422 L 700.3129,605.7507 L 702.6317,611.8564 L 704.9663,601.8223 L 707.3516,603.445 L 709.5007,615.997 L 711.4945,605.8411 L 713.4481,597.4629 L 715.9221,607.05 L 719.2406,612.2874 L 723.0702,606.7579 L 729.2095,600.8928 L 731.3641,609.4289 L 734.3347,604.0339 L 736.5018,600.8316 L 738.6388,609.4887 L 741.4136,605.8244 L 744.3294,602.3839 L 746.4819,617.1293 L 750.0614,599.4433 L 751.8913,603.8815 L 754.7119,613.6315 L 759.0603,603.6963 L 762.965,596.9458 L 765.2201,606.2867 L 767.3249,611.5023 L 769.4834,601.3465 L 772.0774,605.0119 L 774.1821,612.5905 L 776.875,599.839 L 778.8907,604.2006 L 780.8402,614.8203 L 782.7586,607.3975 L 784.8973,598.5295 L 786.9721,604.8584 L 789.2663,612.4373 L 791.5523,601.6783 L 794.2086,604.8208 L 796.5622,613.8886 L 800.2869,606.1996 L 804.73,597.3743 L 807.0721,607.2082 L 809.1613,610.0674 L 811.0879,601.0092 L 813.0966,603.8199 L 815.5792,612.0832 L 817.73,601.3556 L 819.7527,603.8862 L 821.6778,614.5508 L 824.6789,600.6598 L 826.4951,603.8407 L 830.4225,611.626 L 835.0155,604.1276 L 839.3655,599.6282 L 841.5744,609.4742 L 843.4292,608.2668 L 845.521,598.2301 L 848.3789,611.0414 L 850.5649,605.3237 L 852.7443,602.164 L 855.5727,611.3758 L 857.9012,599.583 L 860.1512,608.5111 L 862.3732,607.5707 L 864.6559,600.3407 L 867.0381,610.5863 L 870.6411,606.4115 L 874.6161,598.2225 L 878.5075,610.3865 L 880.4874,607.272 L 882.8039,602.4364 L 885.0559,612.0304 L 887.5112,599.3803 L 889.7691,610.4733 L 892.0994,607.7636 L 894.3653,601.6415 L 896.4549,613.3442 L 898.227,604.6393 L 900.8324,609.0537 L 902.8284,607.3993 L 905.5567,608.0797 L 907.7497,607.5809 L 910.3069,606.9376 L 913.7087,606.1464 L 918.5348,610.8066 L 922.5647,610.1761 L 926.0456,605.6993 L 929.6209,608.6515 L 930.0,630.0 L 930.0,630.0 L 929.6209,602.5888 L 926.0456,599.4266 L 922.5647,606.984 L 918.5348,602.9433 L 913.7087,601.0354 L 910.3069,598.9365 L 907.7497,603.4654 L 905.5567,599.9145 L 902.8284,603.2926 L 900.8324,600.7484 L 898.227,599.2833 L 896.4549,612.0927 L 894.3653,593.2946 L 892.0994,603.9194 L 889.7691,602.0783 L 887.5112,591.6241 L 885.0559,610.0984 L 882.8039,593.9933 L 880.4874,603.1763 L 878.5075,601.9718 L 874.6161,590.0835 L 870.6411,602.0685 L 867.0381,602.106 L 864.6559,591.8604 L 862.3732,603.5668 L 860.1512,599.9827 L 857.9012,592.2207 L 855.5727,609.1879 L 852.7443,593.6312 L 850.5649,600.4753 L 848.3789,602.4627 L 845.521,590.2552 L 843.4292,604.8208 L 841.5744,600.9238 L 839.3655,591.0779 L 835.0155,598.8592 L 830.4225,609.6919 L 826.4951,595.2728 L 824.6789,593.9211 L 821.6778,613.8201 L 819.7527,595.3009 L 817.73,594.8706 L 815.5792,610.2104 L 813.0966,595.2236 L 811.0879,594.4061 L 809.1613,607.4332 L 807.0721,598.6251 L 804.73,589.185 L 800.2869,601.9244 L 796.5622,612.9806 L 794.2086,596.2268 L 791.5523,595.4034 L 789.2663,610.8051 L 786.9721,596.2512 L 784.8973,590.7865 L 782.7586,603.5205 L 780.8402,614.153 L 778.8907,595.5715 L 776.875,592.7896 L 774.1821,611.1224 L 772.0774,596.3522 L 769.4834,594.9709 L 767.3249,609.5376 L 765.2201,597.6445 L 762.965,588.5924 L 759.0603,598.349 L 754.7119,612.6557 L 751.8913,595.2415 L 750.0614,592.1926 L 746.4819,617.0374 L 744.3294,593.757 L 741.4136,601.2407 L 738.6388,600.8575 L 736.5018,592.2003 L 734.3347,598.807 L 731.3641,600.7845 L 729.2095,592.2484 L 723.0702,602.7212 L 719.2406,610.7253 L 715.9221,598.3968 L 713.4481,589.2276 L 711.4945,601.4456 L 709.5007,615.6557 L 707.3516,594.8137 L 704.9663,595.6874 L 702.6317,610.0973 L 700.3129,597.0778 L 698.2563,589.806 L 696.4927,600.8261 L 693.5026,600.8155 L 691.3535,592.3662 L 686.5846,601.9572 L 681.4723,601.7053 L 679.4974,594.7558 L 677.1071,595.0194 L 674.3754,612.7717 L 672.2666,597.274 L 669.6418,592.2798 L 667.2961,607.2739 L 664.6472,597.2828 L 662.575,588.5209 L 660.6076,600.1825 L 655.0789,602.2424 L 651.5954,595.337 L 649.049,590.3125 L 646.8958,601.8139 L 644.7691,614.3237 L 642.8365,597.3904 L 640.8956,587.7264 L 638.3672,602.3879 L 636.1291,602.148 L 633.9559,594.1428 L 631.7598,593.5688 L 629.4712,606.6142 L 627.5762,600.6248 L 625.0704,591.5162 L 621.9622,601.7024 L 617.7785,612.3939 L 614.0312,596.0255 L 611.586,592.123 L 609.2806,606.5508 L 607.4258,601.5321 L 605.2467,593.6064 L 602.2673,599.6946 L 600.4609,611.3375 L 597.764,595.3264 L 595.5292,592.0431 L 593.4158,605.7179 L 590.2208,596.2971 L 587.8041,591.0068 L 583.8889,603.2463 L 580.0977,615.8114 L 577.5694,595.6838 L 575.4558,588.9618 L 573.4889,601.4584 L 571.509,614.246 L 569.1623,595.3975 L 567.1033,590.0102 L 564.932,602.8313 L 561.9354,599.1987 L 559.8026,592.1211 L 558.0115,594.138 L 554.8455,607.1739 L 550.2282,600.7149 L 546.8641,591.2307 L 544.7212,596.3201 L 542.9134,607.0135 L 540.8093,600.0268 L 538.3168,591.4728 L 535.2431,602.8619 L 532.82,601.4278 L 530.839,594.6609 L 528.6351,592.674 L 526.6493,605.1268 L 524.4056,601.1656 L 521.9075,592.4078 L 519.7509,597.0286 L 515.4515,608.6748 L 511.5376,581.3278 L 509.5702,570.5003 L 507.6623,560.1766 L 504.0357,602.4018 L 501.1412,575.7418 L 498.991,564.2177 L 497.0599,575.0332 L 494.2829,613.5167 L 488.7521,574.406 L 486.159,563.5952 L 483.7448,583.5529 L 481.6147,617.2719 L 479.6563,575.6138 L 476.8278,557.9147 L 474.9101,587.2345 L 472.5447,583.651 L 470.1935,570.9243 L 468.0888,559.5108 L 466.2625,585.2183 L 460.941,607.4988 L 456.1315,579.1771 L 454.3764,574.2062 L 452.41,568.77 L 450.0391,558.023 L 448.1042,573.7945 L 445.6955,593.5542 L 443.6055,613.3624 L 441.1065,579.9345 L 438.5766,572.2943 L 436.3737,564.3639 L 434.1707,568.2092 L 431.7902,598.5609 L 429.0389,579.4889 L 424.4777,567.9193 L 421.9063,562.8331 L 419.6752,595.0001 L 417.3221,581.9208 L 415.1742,571.8568 L 413.0457,559.9629 L 410.5207,588.3922 L 408.1842,584.9744 L 406.0921,575.7815 L 404.1017,568.619 L 401.2855,569.7527 L 398.6933,605.7689 L 395.7268,582.7828 L 392.2899,573.742 L 389.7126,562.591 L 387.8095,578.8909 L 385.6954,614.6949 L 383.1835,575.1751 L 380.8915,564.0186 L 378.3631,577.8323 L 375.3482,613.5025 L 373.2011,575.1722 L 371.456,565.9797 L 369.2274,573.3278 L 365.7528,604.0048 L 362.9163,580.1442 L 360.3282,567.0415 L 358.2206,572.3458 L 356.1588,606.41 L 352.7005,571.1019 L 350.3042,567.369 L 348.2024,603.2222 L 345.6822,576.1717 L 342.8979,560.449 L 340.079,592.2429 L 336.1178,580.0508 L 334.1626,569.15 L 332.0689,567.2432 L 329.6139,609.2605 L 327.4697,575.8431 L 325.3517,563.9238 L 322.9552,586.9672 L 321.1636,585.3022 L 316.6804,571.4994 L 313.8323,563.8775 L 311.6042,597.4232 L 309.273,579.4211 L 306.2932,564.2461 L 303.9454,582.7387 L 301.084,581.7505 L 298.573,568.0301 L 296.6762,564.0583 L 294.42,599.7795 L 291.5695,580.8935 L 288.4799,568.0841 L 286.4135,569.2947 L 283.8071,616.5349 L 281.831,574.3269 L 279.5955,558.6827 L 277.3634,593.9273 L 275.0689,579.6421 L 273.1464,569.182 L 271.0772,565.7492 L 269.0,592.5409 L 266.3777,582.2971 L 263.3394,570.4386 L 261.5032,560.46 L 259.3142,583.8782 L 257.0481,606.371 L 254.7026,578.9419 L 252.0386,566.5361 L 249.6492,568.8006 L 247.945,590.4747 L 245.0875,577.9129 L 242.8595,563.9158 L 240.5253,581.0048 L 237.6196,585.0108 L 234.3029,574.4389 L 231.9877,565.8769 L 229.7175,577.08 L 226.8727,583.8622 L 225.1122,573.7497 L 222.5646,563.6682 L 220.5154,596.3292 L 218.2187,579.9243 L 215.8168,565.3306 L 213.7918,574.8881 L 211.1581,585.8437 L 208.1028,574.3189 L 205.9408,563.4388 L 204.0998,578.5897 L 202.2474,609.7994 L 199.7518,573.5706 L 196.5647,571.6737 L 194.2909,593.7639 L 192.3246,584.1721 L 190.2262,571.0122 L 188.3708,563.6959 L 185.9213,602.2398 L 182.6602,575.6254 L 179.9098,568.626 L 177.2029,615.4169 L 175.5065,578.2743 L 172.4474,568.3714 L 169.6388,585.0086 L 167.5347,570.5674 L 165.3672,575.5791 L 163.0884,584.5506 L 160.6748,567.3376 L 158.3398,587.8919 L 155.2819,580.7499 L 152.8372,562.0786 L 150.5236,600.5563 L 148.4258,577.3652 L 146.2663,561.7519 L 144.1314,590.8055 L 142.1093,582.7441 L 140.0529,567.9988 L 136.8103,603.375 L 134.7958,576.3865 L 133.0004,560.9956 L 130.105,585.3605 L 128.0723,569.6484 L 125.5885,593.5951 L 123.705,580.7189 L 121.6822,562.075 L 119.3788,612.6689 L 116.8316,568.134 L 114.5546,590.4029 L 112.6473,579.7099 L 110.2841,566.6255 L 108.4908,610.3001 L 106.4886,572.9999 L 103.4994,587.6053 L 101.8501,571.9107 L 99.81278,602.5575 L 97.67613,572.9737 L 95.15372,584.9835 L 92.6433,612.2944 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5a5ffc'>-<path d='M 90.0,630.0 L 92.6433,613.6312 L 95.15372,602.1957 L 97.67613,595.946 L 99.81278,609.5879 L 101.8501,595.2593 L 103.4994,603.9439 L 106.4886,595.9307 L 108.4908,613.1509 L 110.2841,591.2854 L 112.6473,599.6344 L 114.5546,603.2291 L 116.8316,593.2512 L 119.3788,614.5796 L 121.6822,589.0541 L 123.705,600.3612 L 125.5885,604.636 L 128.0723,594.1362 L 130.105,602.8995 L 133.0004,588.3714 L 134.7958,597.9497 L 136.8103,609.7243 L 140.0529,593.1232 L 142.1093,601.4843 L 144.1314,603.235 L 146.2663,589.1175 L 148.4258,598.4325 L 150.5236,608.1563 L 152.8372,589.3524 L 155.2819,600.3353 L 158.3398,601.8187 L 160.6748,592.7917 L 163.0884,602.6023 L 165.3672,595.3337 L 167.5347,594.5964 L 169.6388,602.8474 L 172.4474,591.817 L 175.5065,599.0557 L 177.2029,616.1258 L 179.9098,591.8141 L 182.6602,597.5329 L 185.9213,608.9997 L 188.3708,589.2798 L 190.2262,594.8765 L 192.3246,602.3682 L 194.2909,604.7136 L 196.5647,593.4477 L 199.7518,596.3095 L 202.2474,612.8909 L 204.0998,596.8616 L 205.9408,590.4959 L 208.1028,596.7887 L 211.1581,603.3805 L 213.7918,594.9293 L 215.8168,591.6569 L 218.2187,600.0297 L 220.5154,606.0574 L 222.5646,589.3199 L 225.1122,596.4528 L 226.8727,602.2202 L 229.7175,596.0834 L 231.9877,591.8415 L 234.3029,596.7205 L 237.6196,602.8058 L 240.5253,598.2316 L 242.8595,590.7548 L 245.0875,598.8402 L 247.945,602.8962 L 249.6492,591.7335 L 252.0386,592.3476 L 254.7026,599.4659 L 257.0481,610.9678 L 259.3142,599.5699 L 261.5032,588.2449 L 263.3394,594.5085 L 266.3777,601.3785 L 269.0,603.9005 L 271.0772,590.2333 L 273.1464,593.8084 L 275.0689,599.7263 L 277.3634,604.7837 L 279.5955,586.911 L 281.831,596.7952 L 283.8071,616.7537 L 286.4135,592.1445 L 288.4799,593.2559 L 291.5695,600.5898 L 294.42,607.7749 L 296.6762,589.4658 L 298.573,593.1888 L 301.084,600.9931 L 303.9454,598.9161 L 306.2932,591.0414 L 309.273,599.7052 L 311.6042,606.4359 L 313.8323,589.193 L 316.6804,595.1521 L 321.1636,602.9805 L 322.9552,601.05 L 325.3517,590.8051 L 327.4697,597.6456 L 329.6139,612.4359 L 332.0689,590.9572 L 334.1626,593.847 L 336.1178,600.0293 L 340.079,603.9081 L 342.8979,587.4667 L 345.6822,597.7495 L 348.2024,609.43 L 350.3042,590.9503 L 352.7005,594.9465 L 356.1588,611.0352 L 358.2206,593.5765 L 360.3282,592.6459 L 362.9163,600.041 L 365.7528,609.6795 L 369.2274,593.9254 L 371.456,591.9808 L 373.2011,597.2729 L 375.3482,614.929 L 378.3631,596.4878 L 380.8915,590.916 L 383.1835,597.2518 L 385.6954,615.7742 L 387.8095,596.8711 L 389.7126,590.082 L 392.2899,596.4474 L 395.7268,601.6783 L 398.6933,610.7661 L 401.2855,592.2072 L 404.1017,593.4955 L 406.0921,597.646 L 408.1842,602.8423 L 410.5207,601.8887 L 413.0457,587.9171 L 415.1742,595.4074 L 417.3221,601.2064 L 419.6752,605.1709 L 421.9063,588.8028 L 424.4777,593.0736 L 429.0389,599.8357 L 431.7902,607.0266 L 434.1707,591.366 L 436.3737,591.0148 L 438.5766,595.6269 L 441.1065,600.0042 L 443.6055,614.8976 L 445.6955,604.442 L 448.1042,594.2317 L 450.0391,586.3316 L 452.41,593.664 L 454.3764,596.7679 L 456.1315,599.6472 L 460.941,611.5239 L 466.2625,600.115 L 468.0888,586.9296 L 470.1935,594.879 L 472.5447,602.1972 L 474.9101,601.302 L 476.8278,586.2933 L 479.6563,597.5176 L 481.6147,617.374 L 483.7448,599.2271 L 486.159,590.5553 L 488.7521,596.7745 L 494.2829,615.0803 L 497.0599,594.8637 L 498.991,590.9028 L 501.1412,597.6383 L 504.0357,608.9159 L 507.6623,588.1913 L 509.5702,594.5213 L 511.5376,600.852 L 515.4515,611.5899 L 519.7509,604.6491 L 521.9075,603.4261 L 524.4056,610.1593 L 526.6493,609.4858 L 528.6351,601.9675 L 530.839,605.1935 L 532.82,610.3807 L 535.2431,608.1268 L 538.3168,602.7106 L 540.8093,609.2721 L 542.9134,610.5732 L 544.7212,604.1995 L 546.8641,602.4765 L 550.2282,609.8049 L 554.8455,610.6658 L 558.0115,602.8714 L 559.8026,603.208 L 561.9354,608.6431 L 564.932,608.1705 L 567.1033,600.4837 L 569.1623,605.7325 L 571.509,615.092 L 573.4889,607.4379 L 575.4558,599.7402 L 577.5694,605.956 L 580.0977,616.3074 L 583.8889,608.3441 L 587.8041,601.0369 L 590.2208,606.3812 L 593.4158,609.8859 L 595.5292,601.6057 L 597.764,605.6628 L 600.4609,613.1637 L 602.2673,606.1795 L 605.2467,604.3432 L 607.4258,610.4441 L 609.2806,610.3519 L 611.586,601.7534 L 614.0312,606.1788 L 617.7785,613.7548 L 621.9622,607.4813 L 625.0704,602.754 L 627.5762,609.7097 L 629.4712,610.3934 L 631.7598,602.6428 L 633.9559,604.7709 L 636.1291,610.9018 L 638.3672,607.9984 L 640.8956,599.2785 L 642.8365,607.2461 L 644.7691,615.1222 L 646.8958,607.6024 L 649.049,600.678 L 651.5954,605.6625 L 655.0789,610.9488 L 660.6076,606.5675 L 662.575,599.7121 L 664.6472,607.1532 L 667.2961,610.7424 L 669.6418,601.7862 L 672.2666,607.1583 L 674.3754,614.1778 L 677.1071,603.5741 L 679.4974,605.2322 L 681.4723,610.5262 L 686.5846,607.6319 L 691.3535,603.3568 L 693.5026,609.8516 L 696.4927,606.9865 L 698.2563,600.4954 L 700.3129,607.0124 L 702.6317,612.4515 L 704.9663,603.8542 L 707.3516,605.2581 L 709.5007,616.1166 L 711.4945,607.2968 L 713.4481,600.1599 L 715.9221,608.0083 L 719.2406,612.8125 L 723.0702,608.1042 L 729.2095,603.2864 L 731.3641,609.8271 L 734.3347,605.7624 L 736.5018,603.2383 L 738.6388,609.8869 L 741.4136,607.3384 L 744.3294,604.407 L 746.4819,617.1657 L 750.0614,601.8325 L 751.8913,605.5997 L 754.7119,613.9641 L 759.0603,605.4772 L 762.965,599.6982 L 765.2201,607.4507 L 767.3249,612.1631 L 769.4834,603.4629 L 772.0774,606.4457 L 774.1821,613.0864 L 776.875,602.1494 L 778.8907,605.8211 L 780.8402,615.0479 L 782.7586,608.6825 L 784.8973,601.0835 L 786.9721,606.3345 L 789.2663,612.9872 L 791.5523,603.748 L 794.2086,606.3232 L 796.5622,614.1964 L 800.2869,607.6144 L 804.73,600.0611 L 807.0721,608.1476 L 809.1613,610.947 L 811.0879,603.1796 L 813.0966,605.5483 L 815.5792,612.7104 L 817.73,603.4808 L 819.7527,605.6147 L 821.6778,614.8017 L 824.6789,602.8696 L 826.4951,605.5779 L 830.4225,612.2736 L 835.0155,605.8634 L 839.3655,602.1691 L 841.5744,609.8724 L 843.4292,609.4118 L 845.521,600.8163 L 848.3789,611.091 L 850.5649,606.9063 L 852.7443,604.3213 L 855.5727,612.1095 L 857.9012,601.9824 L 860.1512,609.15 L 862.3732,608.8718 L 864.6559,602.7635 L 867.0381,610.7497 L 870.6411,607.8394 L 874.6161,600.8348 L 878.5075,610.5674 L 880.4874,608.6227 L 882.8039,604.5339 L 885.0559,612.6765 L 887.5112,601.8365 L 889.7691,610.6717 L 892.0994,609.0165 L 894.3653,603.895 L 896.4549,613.7584 L 898.227,606.3589 L 900.8324,609.5963 L 902.8284,608.7062 L 905.5567,608.9082 L 907.7497,608.8995 L 910.3069,608.1147 L 913.7087,607.6793 L 918.5348,610.9656 L 922.5647,611.1592 L 926.0456,607.3358 L 929.6209,609.1576 L 930.0,630.0 L 930.0,630.0 L 929.6209,608.6515 L 926.0456,605.6993 L 922.5647,610.1761 L 918.5348,610.8066 L 913.7087,606.1464 L 910.3069,606.9376 L 907.7497,607.5809 L 905.5567,608.0797 L 902.8284,607.3993 L 900.8324,609.0537 L 898.227,604.6393 L 896.4549,613.3442 L 894.3653,601.6415 L 892.0994,607.7636 L 889.7691,610.4733 L 887.5112,599.3803 L 885.0559,612.0304 L 882.8039,602.4364 L 880.4874,607.272 L 878.5075,610.3865 L 874.6161,598.2225 L 870.6411,606.4115 L 867.0381,610.5863 L 864.6559,600.3407 L 862.3732,607.5707 L 860.1512,608.5111 L 857.9012,599.583 L 855.5727,611.3758 L 852.7443,602.164 L 850.5649,605.3237 L 848.3789,611.0414 L 845.521,598.2301 L 843.4292,608.2668 L 841.5744,609.4742 L 839.3655,599.6282 L 835.0155,604.1276 L 830.4225,611.626 L 826.4951,603.8407 L 824.6789,600.6598 L 821.6778,614.5508 L 819.7527,603.8862 L 817.73,601.3556 L 815.5792,612.0832 L 813.0966,603.8199 L 811.0879,601.0092 L 809.1613,610.0674 L 807.0721,607.2082 L 804.73,597.3743 L 800.2869,606.1996 L 796.5622,613.8886 L 794.2086,604.8208 L 791.5523,601.6783 L 789.2663,612.4373 L 786.9721,604.8584 L 784.8973,598.5295 L 782.7586,607.3975 L 780.8402,614.8203 L 778.8907,604.2006 L 776.875,599.839 L 774.1821,612.5905 L 772.0774,605.0119 L 769.4834,601.3465 L 767.3249,611.5023 L 765.2201,606.2867 L 762.965,596.9458 L 759.0603,603.6963 L 754.7119,613.6315 L 751.8913,603.8815 L 750.0614,599.4433 L 746.4819,617.1293 L 744.3294,602.3839 L 741.4136,605.8244 L 738.6388,609.4887 L 736.5018,600.8316 L 734.3347,604.0339 L 731.3641,609.4289 L 729.2095,600.8928 L 723.0702,606.7579 L 719.2406,612.2874 L 715.9221,607.05 L 713.4481,597.4629 L 711.4945,605.8411 L 709.5007,615.997 L 707.3516,603.445 L 704.9663,601.8223 L 702.6317,611.8564 L 700.3129,605.7507 L 698.2563,597.8422 L 696.4927,605.4491 L 693.5026,609.4753 L 691.3535,601.0259 L 686.5846,606.2215 L 681.4723,610.3803 L 679.4974,603.4308 L 677.1071,601.4431 L 674.3754,613.8263 L 672.2666,605.9316 L 669.6418,599.4233 L 667.2961,609.8731 L 664.6472,605.9425 L 662.575,596.9159 L 660.6076,604.9762 L 655.0789,610.9153 L 651.5954,604.0099 L 649.049,598.1036 L 646.8958,606.1569 L 644.7691,614.9166 L 642.8365,606.072 L 640.8956,596.408 L 638.3672,606.5996 L 636.1291,610.8493 L 633.9559,602.8441 L 631.7598,600.382 L 629.4712,609.4454 L 627.5762,609.3086 L 625.0704,600.2 L 621.9622,606.0388 L 617.7785,613.4091 L 614.0312,604.7115 L 611.586,599.3584 L 609.2806,609.3994 L 607.4258,610.2137 L 605.2467,602.288 L 602.2673,604.5649 L 600.4609,612.7072 L 597.764,604.0146 L 595.5292,599.2326 L 593.4158,608.8444 L 590.2208,604.9766 L 587.8041,598.5441 L 583.8889,607.0707 L 580.0977,616.179 L 577.5694,604.3763 L 575.4558,597.0593 L 573.4889,605.9458 L 571.509,614.8761 L 569.1623,604.0901 L 567.1033,597.8757 L 564.932,606.833 L 561.9354,607.8934 L 559.8026,600.8159 L 558.0115,600.6952 L 554.8455,609.7907 L 550.2282,609.3834 L 546.8641,599.8992 L 544.7212,602.2318 L 542.9134,609.6806 L 540.8093,608.7106 L 538.3168,600.1566 L 535.2431,606.8111 L 532.82,610.1356 L 530.839,603.3688 L 528.6351,599.6512 L 526.6493,608.3933 L 524.4056,609.8559 L 521.9075,601.0981 L 519.7509,602.7544 L 515.4515,610.8562 L 511.5376,598.737 L 509.5702,587.9094 L 507.6623,577.5858 L 504.0357,606.3794 L 501.1412,593.1356 L 498.991,581.6115 L 497.0599,587.1345 L 494.2829,614.4706 L 488.7521,591.8108 L 486.159,581.0 L 483.7448,593.136 L 481.6147,617.3331 L 479.6563,592.9989 L 476.8278,575.2998 L 474.9101,595.8351 L 472.5447,601.0493 L 470.1935,588.3226 L 468.0888,576.292 L 466.2625,594.3331 L 460.941,609.9559 L 456.1315,596.5491 L 454.3764,591.5782 L 452.41,586.142 L 450.0391,575.395 L 448.1042,586.3072 L 445.6955,600.2164 L 443.6055,614.2967 L 441.1065,597.3043 L 438.5766,589.6641 L 436.3737,581.7337 L 434.1707,582.3518 L 431.7902,603.72 L 429.0389,596.8674 L 424.4777,585.2978 L 421.9063,578.7282 L 419.6752,601.2137 L 417.3221,599.3059 L 415.1742,589.2419 L 413.0457,577.348 L 410.5207,596.6581 L 408.1842,602.3463 L 406.0921,593.1535 L 404.1017,585.991 L 401.2855,583.495 L 398.6933,608.8189 L 395.7268,600.1745 L 392.2899,591.1337 L 389.7126,579.9826 L 387.8095,589.8698 L 385.6954,615.3512 L 383.1835,592.5668 L 380.8915,581.4103 L 378.3631,589.2357 L 375.3482,614.3776 L 373.2011,592.5179 L 371.456,583.3254 L 369.2274,585.9148 L 365.7528,607.4682 L 362.9163,597.5162 L 360.3282,584.4135 L 358.2206,585.3135 L 356.1588,609.2324 L 352.7005,588.4673 L 350.3042,581.7873 L 348.2024,607.0029 L 345.6822,593.524 L 342.8979,576.9546 L 340.079,599.3733 L 336.1178,597.4141 L 334.1626,586.5132 L 332.0689,581.7403 L 329.6139,611.199 L 327.4697,593.1954 L 325.3517,581.2761 L 322.9552,595.5613 L 321.1636,602.5998 L 316.6804,588.797 L 313.8323,579.346 L 311.6042,602.9104 L 309.273,596.7646 L 306.2932,581.5897 L 303.9454,592.6324 L 301.084,599.0765 L 298.573,585.3561 L 296.6762,579.5925 L 294.42,604.6608 L 291.5695,598.2064 L 288.4799,585.397 L 286.4135,583.2689 L 283.8071,616.6662 L 281.831,591.6551 L 279.5955,576.0109 L 277.3634,600.5566 L 275.0689,596.9593 L 273.1464,586.4993 L 271.0772,580.7014 L 269.0,599.4678 L 266.3777,599.5859 L 263.3394,587.7275 L 261.5032,577.7488 L 259.3142,593.4656 L 257.0481,609.1781 L 254.7026,596.2133 L 252.0386,583.8075 L 249.6492,582.8317 L 247.945,598.0755 L 245.0875,595.2214 L 242.8595,581.2243 L 240.5253,591.5395 L 237.6196,602.2603 L 234.3029,591.6883 L 231.9877,583.1263 L 229.7175,588.6781 L 226.8727,601.0941 L 225.1122,590.9816 L 222.5646,579.362 L 220.5154,602.2694 L 218.2187,597.165 L 215.8168,582.5713 L 213.7918,587.1491 L 211.1581,603.1063 L 208.1028,591.5815 L 205.9408,580.7014 L 204.0998,589.7611 L 202.2474,611.6876 L 199.7518,590.7654 L 196.5647,585.0024 L 194.2909,600.4545 L 192.3246,601.3691 L 190.2262,588.2092 L 188.3708,579.3963 L 185.9213,606.3772 L 182.6602,592.7939 L 179.9098,582.8364 L 177.2029,615.8457 L 175.5065,595.4821 L 172.4474,582.7416 L 169.6388,602.1662 L 167.5347,587.7249 L 165.3672,587.6673 L 163.0884,601.7082 L 160.6748,584.4952 L 158.3398,596.416 L 155.2819,597.8615 L 152.8372,579.1903 L 150.5236,605.1924 L 148.4258,594.4724 L 146.2663,578.8592 L 144.1314,598.4085 L 142.1093,599.7792 L 140.0529,585.0338 L 136.8103,607.2432 L 134.7958,593.3668 L 133.0004,577.976 L 130.105,602.3059 L 128.0723,586.5938 L 125.5885,600.336 L 123.705,597.5067 L 121.6822,578.8628 L 119.3788,613.8372 L 116.8316,584.8759 L 114.5546,598.2553 L 112.6473,596.3555 L 110.2841,581.8205 L 108.4908,612.0351 L 106.4886,589.4005 L 103.4994,603.8068 L 101.8501,588.1122 L 99.81278,606.8939 L 97.67613,588.7507 L 95.15372,599.9291 L 92.6433,613.1105 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#a23338'>-<path d='M 90.0,630.0 L 92.6433,615.3312 L 95.15372,607.0142 L 97.67613,599.9054 L 99.81278,611.0976 L 101.8501,599.5126 L 103.4994,609.6222 L 106.4886,600.402 L 108.4908,614.4338 L 110.2841,595.3877 L 112.6473,604.9014 L 114.5546,605.7489 L 116.8316,597.5621 L 119.3788,615.7122 L 121.6822,593.6093 L 123.705,605.6566 L 125.5885,606.9617 L 128.0723,598.6951 L 130.105,608.731 L 133.0004,593.0543 L 134.7958,603.0242 L 136.8103,611.4075 L 140.0529,597.6923 L 142.1093,607.1298 L 144.1314,605.8218 L 146.2663,593.7201 L 148.4258,603.6828 L 150.5236,610.0693 L 152.8372,593.963 L 155.2819,605.8554 L 158.3398,604.6608 L 160.6748,597.382 L 163.0884,608.3849 L 165.3672,599.0648 L 167.5347,599.4543 L 169.6388,608.692 L 172.4474,596.1082 L 175.5065,604.4051 L 177.2029,617.0126 L 179.9098,596.0718 L 182.6602,602.684 L 185.9213,610.8259 L 188.3708,593.9254 L 190.2262,599.7686 L 192.3246,608.1822 L 194.2909,607.1699 L 196.5647,597.5289 L 199.7518,601.3789 L 202.2474,614.2183 L 204.0998,600.4191 L 205.9408,594.9082 L 208.1028,601.92 L 211.1581,609.2798 L 213.7918,598.7531 L 215.8168,596.191 L 218.2187,605.4973 L 220.5154,608.3671 L 222.5646,594.0144 L 225.1122,601.5404 L 226.8727,608.0064 L 229.7175,599.7934 L 231.9877,596.428 L 234.3029,601.8971 L 237.6196,608.6672 L 240.5253,601.652 L 242.8595,595.2517 L 245.0875,604.2772 L 247.945,605.6151 L 249.6492,596.0627 L 252.0386,596.9736 L 254.7026,604.8759 L 257.0481,612.5525 L 259.3142,602.7795 L 261.5032,593.0663 L 263.3394,599.4051 L 266.3777,607.0299 L 269.0,606.4742 L 271.0772,594.7769 L 273.1464,598.6794 L 275.0689,605.2887 L 277.3634,607.2946 L 279.5955,591.949 L 281.831,601.9675 L 283.8071,617.421 L 286.4135,596.4795 L 288.4799,597.9957 L 291.5695,606.1609 L 294.42,609.8797 L 296.6762,594.1734 L 298.573,597.9723 L 301.084,606.686 L 303.9454,602.2395 L 306.2932,595.5726 L 309.273,605.2019 L 311.6042,608.6909 L 313.8323,593.9006 L 316.6804,600.1296 L 321.1636,608.8871 L 322.9552,604.0657 L 325.3517,595.3348 L 327.4697,602.944 L 329.6139,613.8616 L 332.0689,595.4278 L 334.1626,598.7071 L 336.1178,605.6172 L 340.079,606.5672 L 342.8979,592.4391 L 345.6822,603.0902 L 348.2024,611.2744 L 350.3042,595.4005 L 352.7005,599.948 L 356.1588,612.6484 L 358.2206,597.6927 L 360.3282,597.3827 L 362.9163,605.6457 L 365.7528,611.4677 L 369.2274,597.9526 L 371.456,596.6497 L 373.2011,602.5385 L 375.3482,615.9296 L 378.3631,600.2204 L 380.8915,595.4661 L 383.1835,602.5181 L 385.6954,616.68 L 387.8095,600.4965 L 389.7126,594.5278 L 392.2899,601.6524 L 395.7268,607.4296 L 398.6933,612.4603 L 401.2855,596.5232 L 404.1017,598.3716 L 406.0921,602.9436 L 408.1842,608.7212 L 410.5207,604.8511 L 413.0457,592.7582 L 415.1742,600.425 L 417.3221,606.8571 L 419.6752,607.6316 L 421.9063,593.652 L 424.4777,597.8586 L 429.0389,605.315 L 431.7902,609.2182 L 434.1707,595.7848 L 436.3737,595.5773 L 438.5766,600.7043 L 441.1065,605.5928 L 443.6055,615.9092 L 445.6955,607.0215 L 448.1042,598.2699 L 450.0391,591.4856 L 452.41,598.4548 L 454.3764,601.9255 L 456.1315,605.1031 L 460.941,613.0824 L 466.2625,603.3028 L 468.0888,592.0128 L 470.1935,599.8514 L 472.5447,607.9776 L 474.9101,604.3614 L 476.8278,591.5034 L 479.6563,602.8525 L 481.6147,617.902 L 483.7448,602.5367 L 486.159,595.1135 L 488.7521,602.0123 L 494.2829,616.1115 L 497.0599,598.7968 L 498.991,595.4909 L 501.1412,602.9141 L 504.0357,610.8485 L 507.6623,593.0047 L 509.5702,599.5381 L 511.5376,606.515 L 515.4515,613.2782 L 519.7509,607.5138 L 521.9075,606.2689 L 524.4056,612.8877 L 526.6493,611.5359 L 528.6351,605.2413 L 530.839,607.9846 L 532.82,613.0908 L 535.2431,610.3862 L 538.3168,605.5629 L 540.8093,612.0347 L 542.9134,612.4081 L 544.7212,607.1145 L 546.8641,605.312 L 550.2282,612.5215 L 554.8455,612.5044 L 558.0115,606.0016 L 559.8026,606.0552 L 561.9354,611.3948 L 564.932,610.4438 L 567.1033,604.0441 L 569.1623,608.5279 L 571.509,616.1947 L 573.4889,609.8541 L 575.4558,603.3801 L 577.5694,608.7587 L 580.0977,617.0965 L 583.8889,610.5648 L 587.8041,604.4675 L 590.2208,609.1584 L 593.4158,611.8725 L 595.5292,604.9299 L 597.764,608.4772 L 600.4609,614.5873 L 602.2673,608.7496 L 605.2467,607.1597 L 607.4258,613.1404 L 609.2806,612.2422 L 611.586,605.087 L 614.0312,608.9903 L 617.7785,615.0683 L 621.9622,609.8749 L 625.0704,605.5888 L 627.5762,612.4147 L 629.4712,612.275 L 631.7598,605.8459 L 633.9559,607.5926 L 636.1291,613.6148 L 638.3672,610.3191 L 640.8956,603.0388 L 642.8365,610.0117 L 644.7691,616.1396 L 646.8958,609.9734 L 649.049,604.186 L 651.5954,608.4761 L 655.0789,613.6611 L 660.6076,609.0909 L 662.575,603.4228 L 664.6472,609.9318 L 667.2961,612.5525 L 669.6418,605.0746 L 672.2666,609.9004 L 674.3754,615.4971 L 677.1071,606.6153 L 679.4974,608.0363 L 681.4723,613.2319 L 686.5846,609.9869 L 691.3535,606.1741 L 693.5026,612.6076 L 696.4927,609.437 L 698.2563,604.0383 L 700.3129,609.794 L 702.6317,613.9692 L 704.9663,606.8042 L 707.3516,608.0272 L 709.5007,616.8671 L 711.4945,609.6692 L 713.4481,603.7707 L 715.9221,610.7672 L 719.2406,614.2697 L 723.0702,610.3555 L 729.2095,606.1015 L 731.3641,612.5613 L 734.3347,608.3973 L 736.5018,606.0483 L 738.6388,612.5883 L 741.4136,609.7641 L 744.3294,607.19 L 746.4819,617.6361 L 750.0614,605.1093 L 751.8913,608.3397 L 754.7119,615.2207 L 759.0603,608.1239 L 762.965,603.3345 L 765.2201,610.1754 L 767.3249,613.7209 L 769.4834,606.4399 L 772.0774,609.2236 L 774.1821,614.4991 L 776.875,605.3744 L 778.8907,608.6034 L 780.8402,616.066 L 782.7586,610.858 L 784.8973,604.4843 L 786.9721,609.0964 L 789.2663,614.4232 L 791.5523,606.6828 L 794.2086,609.0756 L 796.5622,615.4121 L 800.2869,609.8942 L 804.73,603.585 L 807.0721,610.8679 L 809.1613,612.7031 L 811.0879,606.2069 L 813.0966,608.3168 L 815.5792,614.2048 L 817.73,606.4665 L 819.7527,608.3496 L 821.6778,615.8767 L 824.6789,605.9188 L 826.4951,608.3222 L 830.4225,613.7774 L 835.0155,608.4407 L 839.3655,605.2366 L 841.5744,612.5839 L 843.4292,611.3671 L 845.521,604.2177 L 848.3789,613.7508 L 850.5649,609.3115 L 852.7443,607.0459 L 855.5727,613.6636 L 857.9012,605.1578 L 860.1512,611.8484 L 862.3732,610.9882 L 864.6559,605.7551 L 867.0381,613.4109 L 870.6411,610.0375 L 874.6161,604.1751 L 878.5075,613.2622 L 880.4874,610.726 L 882.8039,607.1776 L 885.0559,614.0936 L 887.5112,605.0294 L 889.7691,613.3074 L 892.0994,611.0236 L 894.3653,606.6715 L 896.4549,614.9589 L 898.227,608.7678 L 900.8324,612.224 L 902.8284,610.7089 L 905.5567,611.4688 L 907.7497,610.8146 L 910.3069,610.5791 L 913.7087,609.7848 L 918.5348,613.5094 L 922.5647,612.6565 L 926.0456,609.5245 L 929.6209,611.5155 L 930.0,630.0 L 930.0,630.0 L 929.6209,609.1576 L 926.0456,607.3358 L 922.5647,611.1592 L 918.5348,610.9656 L 913.7087,607.6793 L 910.3069,608.1147 L 907.7497,608.8995 L 905.5567,608.9082 L 902.8284,608.7062 L 900.8324,609.5963 L 898.227,606.3589 L 896.4549,613.7584 L 894.3653,603.895 L 892.0994,609.0165 L 889.7691,610.6717 L 887.5112,601.8365 L 885.0559,612.6765 L 882.8039,604.5339 L 880.4874,608.6227 L 878.5075,610.5674 L 874.6161,600.8348 L 870.6411,607.8394 L 867.0381,610.7497 L 864.6559,602.7635 L 862.3732,608.8718 L 860.1512,609.15 L 857.9012,601.9824 L 855.5727,612.1095 L 852.7443,604.3213 L 850.5649,606.9063 L 848.3789,611.091 L 845.521,600.8163 L 843.4292,609.4118 L 841.5744,609.8724 L 839.3655,602.1691 L 835.0155,605.8634 L 830.4225,612.2736 L 826.4951,605.5779 L 824.6789,602.8696 L 821.6778,614.8017 L 819.7527,605.6147 L 817.73,603.4808 L 815.5792,612.7104 L 813.0966,605.5483 L 811.0879,603.1796 L 809.1613,610.947 L 807.0721,608.1476 L 804.73,600.0611 L 800.2869,607.6144 L 796.5622,614.1964 L 794.2086,606.3232 L 791.5523,603.748 L 789.2663,612.9872 L 786.9721,606.3345 L 784.8973,601.0835 L 782.7586,608.6825 L 780.8402,615.0479 L 778.8907,605.8211 L 776.875,602.1494 L 774.1821,613.0864 L 772.0774,606.4457 L 769.4834,603.4629 L 767.3249,612.1631 L 765.2201,607.4507 L 762.965,599.6982 L 759.0603,605.4772 L 754.7119,613.9641 L 751.8913,605.5997 L 750.0614,601.8325 L 746.4819,617.1657 L 744.3294,604.407 L 741.4136,607.3384 L 738.6388,609.8869 L 736.5018,603.2383 L 734.3347,605.7624 L 731.3641,609.8271 L 729.2095,603.2864 L 723.0702,608.1042 L 719.2406,612.8125 L 715.9221,608.0083 L 713.4481,600.1599 L 711.4945,607.2968 L 709.5007,616.1166 L 707.3516,605.2581 L 704.9663,603.8542 L 702.6317,612.4515 L 700.3129,607.0124 L 698.2563,600.4954 L 696.4927,606.9865 L 693.5026,609.8516 L 691.3535,603.3568 L 686.5846,607.6319 L 681.4723,610.5262 L 679.4974,605.2322 L 677.1071,603.5741 L 674.3754,614.1778 L 672.2666,607.1583 L 669.6418,601.7862 L 667.2961,610.7424 L 664.6472,607.1532 L 662.575,599.7121 L 660.6076,606.5675 L 655.0789,610.9488 L 651.5954,605.6625 L 649.049,600.678 L 646.8958,607.6024 L 644.7691,615.1222 L 642.8365,607.2461 L 640.8956,599.2785 L 638.3672,607.9984 L 636.1291,610.9018 L 633.9559,604.7709 L 631.7598,602.6428 L 629.4712,610.3934 L 627.5762,609.7097 L 625.0704,602.754 L 621.9622,607.4813 L 617.7785,613.7548 L 614.0312,606.1788 L 611.586,601.7534 L 609.2806,610.3519 L 607.4258,610.4441 L 605.2467,604.3432 L 602.2673,606.1795 L 600.4609,613.1637 L 597.764,605.6628 L 595.5292,601.6057 L 593.4158,609.8859 L 590.2208,606.3812 L 587.8041,601.0369 L 583.8889,608.3441 L 580.0977,616.3074 L 577.5694,605.956 L 575.4558,599.7402 L 573.4889,607.4379 L 571.509,615.092 L 569.1623,605.7325 L 567.1033,600.4837 L 564.932,608.1705 L 561.9354,608.6431 L 559.8026,603.208 L 558.0115,602.8714 L 554.8455,610.6658 L 550.2282,609.8049 L 546.8641,602.4765 L 544.7212,604.1995 L 542.9134,610.5732 L 540.8093,609.2721 L 538.3168,602.7106 L 535.2431,608.1268 L 532.82,610.3807 L 530.839,605.1935 L 528.6351,601.9675 L 526.6493,609.4858 L 524.4056,610.1593 L 521.9075,603.4261 L 519.7509,604.6491 L 515.4515,611.5899 L 511.5376,600.852 L 509.5702,594.5213 L 507.6623,588.1913 L 504.0357,608.9159 L 501.1412,597.6383 L 498.991,590.9028 L 497.0599,594.8637 L 494.2829,615.0803 L 488.7521,596.7745 L 486.159,590.5553 L 483.7448,599.2271 L 481.6147,617.374 L 479.6563,597.5176 L 476.8278,586.2933 L 474.9101,601.302 L 472.5447,602.1972 L 470.1935,594.879 L 468.0888,586.9296 L 466.2625,600.115 L 460.941,611.5239 L 456.1315,599.6472 L 454.3764,596.7679 L 452.41,593.664 L 450.0391,586.3316 L 448.1042,594.2317 L 445.6955,604.442 L 443.6055,614.8976 L 441.1065,600.0042 L 438.5766,595.6269 L 436.3737,591.0148 L 434.1707,591.366 L 431.7902,607.0266 L 429.0389,599.8357 L 424.4777,593.0736 L 421.9063,588.8028 L 419.6752,605.1709 L 417.3221,601.2064 L 415.1742,595.4074 L 413.0457,587.9171 L 410.5207,601.8887 L 408.1842,602.8423 L 406.0921,597.646 L 404.1017,593.4955 L 401.2855,592.2072 L 398.6933,610.7661 L 395.7268,601.6783 L 392.2899,596.4474 L 389.7126,590.082 L 387.8095,596.8711 L 385.6954,615.7742 L 383.1835,597.2518 L 380.8915,590.916 L 378.3631,596.4878 L 375.3482,614.929 L 373.2011,597.2729 L 371.456,591.9808 L 369.2274,593.9254 L 365.7528,609.6795 L 362.9163,600.041 L 360.3282,592.6459 L 358.2206,593.5765 L 356.1588,611.0352 L 352.7005,594.9465 L 350.3042,590.9503 L 348.2024,609.43 L 345.6822,597.7495 L 342.8979,587.4667 L 340.079,603.9081 L 336.1178,600.0293 L 334.1626,593.847 L 332.0689,590.9572 L 329.6139,612.4359 L 327.4697,597.6456 L 325.3517,590.8051 L 322.9552,601.05 L 321.1636,602.9805 L 316.6804,595.1521 L 313.8323,589.193 L 311.6042,606.4359 L 309.273,599.7052 L 306.2932,591.0414 L 303.9454,598.9161 L 301.084,600.9931 L 298.573,593.1888 L 296.6762,589.4658 L 294.42,607.7749 L 291.5695,600.5898 L 288.4799,593.2559 L 286.4135,592.1445 L 283.8071,616.7537 L 281.831,596.7952 L 279.5955,586.911 L 277.3634,604.7837 L 275.0689,599.7263 L 273.1464,593.8084 L 271.0772,590.2333 L 269.0,603.9005 L 266.3777,601.3785 L 263.3394,594.5085 L 261.5032,588.2449 L 259.3142,599.5699 L 257.0481,610.9678 L 254.7026,599.4659 L 252.0386,592.3476 L 249.6492,591.7335 L 247.945,602.8962 L 245.0875,598.8402 L 242.8595,590.7548 L 240.5253,598.2316 L 237.6196,602.8058 L 234.3029,596.7205 L 231.9877,591.8415 L 229.7175,596.0834 L 226.8727,602.2202 L 225.1122,596.4528 L 222.5646,589.3199 L 220.5154,606.0574 L 218.2187,600.0297 L 215.8168,591.6569 L 213.7918,594.9293 L 211.1581,603.3805 L 208.1028,596.7887 L 205.9408,590.4959 L 204.0998,596.8616 L 202.2474,612.8909 L 199.7518,596.3095 L 196.5647,593.4477 L 194.2909,604.7136 L 192.3246,602.3682 L 190.2262,594.8765 L 188.3708,589.2798 L 185.9213,608.9997 L 182.6602,597.5329 L 179.9098,591.8141 L 177.2029,616.1258 L 175.5065,599.0557 L 172.4474,591.817 L 169.6388,602.8474 L 167.5347,594.5964 L 165.3672,595.3337 L 163.0884,602.6023 L 160.6748,592.7917 L 158.3398,601.8187 L 155.2819,600.3353 L 152.8372,589.3524 L 150.5236,608.1563 L 148.4258,598.4325 L 146.2663,589.1175 L 144.1314,603.235 L 142.1093,601.4843 L 140.0529,593.1232 L 136.8103,609.7243 L 134.7958,597.9497 L 133.0004,588.3714 L 130.105,602.8995 L 128.0723,594.1362 L 125.5885,604.636 L 123.705,600.3612 L 121.6822,589.0541 L 119.3788,614.5796 L 116.8316,593.2512 L 114.5546,603.2291 L 112.6473,599.6344 L 110.2841,591.2854 L 108.4908,613.1509 L 106.4886,595.9307 L 103.4994,603.9439 L 101.8501,595.2593 L 99.81278,609.5879 L 97.67613,595.946 L 95.15372,602.1957 L 92.6433,613.6312 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#c808c2'>-<path d='M 90.0,630.0 L 92.6433,618.7337 L 95.15372,610.1488 L 97.67613,603.0603 L 99.81278,614.2704 L 101.8501,602.6855 L 103.4994,612.7925 L 106.4886,603.6106 L 108.4908,617.867 L 110.2841,598.5452 L 112.6473,608.0794 L 114.5546,608.9217 L 116.8316,600.6992 L 119.3788,618.9055 L 121.6822,596.8076 L 123.705,608.7963 L 125.5885,610.4077 L 128.0723,601.8424 L 130.105,611.9268 L 133.0004,596.2526 L 134.7958,606.1945 L 136.8103,614.6263 L 140.0529,600.8524 L 142.1093,610.3001 L 144.1314,609.1682 L 146.2663,596.87 L 148.4258,606.8658 L 150.5236,613.4514 L 152.8372,597.1307 L 155.2819,608.9925 L 158.3398,607.8208 L 160.6748,600.5676 L 163.0884,611.5374 L 165.3672,602.5006 L 167.5347,602.6041 L 169.6388,611.8112 L 172.4474,599.2658 L 175.5065,607.5754 L 177.2029,620.216 L 179.9098,599.4309 L 182.6602,605.8415 L 185.9213,614.1825 L 188.3708,597.2642 L 190.2262,602.921 L 192.3246,611.3321 L 194.2909,610.4831 L 196.5647,600.7171 L 199.7518,604.5441 L 202.2474,617.5825 L 204.0998,603.8268 L 205.9408,598.0529 L 208.1028,605.0954 L 211.1581,612.4526 L 213.7918,602.245 L 215.8168,599.3153 L 218.2187,608.6624 L 220.5154,611.5399 L 222.5646,597.1643 L 225.1122,604.6954 L 226.8727,611.1614 L 229.7175,603.0479 L 231.9877,599.5881 L 234.3029,605.0597 L 237.6196,611.8477 L 240.5253,604.8249 L 242.8595,598.4194 L 245.0875,607.427 L 247.945,609.0967 L 249.6492,599.5214 L 252.0386,600.1132 L 254.7026,608.0538 L 257.0481,616.0802 L 259.3142,606.1081 L 261.5032,596.2213 L 263.3394,602.5549 L 266.3777,610.1951 L 269.0,609.9737 L 271.0772,598.131 L 273.1464,601.8446 L 275.0689,608.4717 L 277.3634,610.4904 L 279.5955,595.1168 L 281.831,605.1148 L 283.8071,620.9001 L 286.4135,599.6906 L 288.4799,601.1889 L 291.5695,609.3363 L 294.42,613.0116 L 296.6762,597.3718 L 298.573,601.1681 L 301.084,609.8793 L 303.9454,605.6395 L 306.2932,598.7633 L 309.273,608.3696 L 311.6042,612.0373 L 313.8323,597.3083 L 316.6804,603.2846 L 321.1636,612.0369 L 322.9552,607.5091 L 325.3517,598.523 L 327.4697,606.0913 L 329.6139,617.3025 L 332.0689,598.8329 L 334.1626,601.8927 L 336.1178,608.7518 L 340.079,609.7451 L 342.8979,595.7498 L 345.6822,606.2733 L 348.2024,614.58 L 350.3042,598.8643 L 352.7005,603.1081 L 356.1588,616.0229 L 358.2206,601.0671 L 360.3282,600.5351 L 362.9163,608.7955 L 365.7528,615.0489 L 369.2274,601.4905 L 371.456,599.8251 L 373.2011,605.6526 L 375.3482,619.3908 L 378.3631,603.4034 L 380.8915,598.6057 L 383.1835,605.6705 L 385.6954,619.8784 L 387.8095,603.9169 L 389.7126,597.7007 L 392.2899,604.8405 L 395.7268,610.5973 L 398.6933,615.6816 L 401.2855,599.9105 L 404.1017,601.5776 L 406.0921,606.068 L 408.1842,611.9297 L 410.5207,608.0852 L 413.0457,595.9514 L 415.1742,603.5799 L 417.3221,609.9865 L 419.6752,611.0443 L 421.9063,596.8095 L 424.4777,601.0263 L 429.0389,608.4929 L 431.7902,612.5442 L 434.1707,599.2282 L 436.3737,598.7297 L 438.5766,603.8746 L 441.1065,608.7427 L 443.6055,619.2913 L 445.6955,610.4011 L 448.1042,601.7388 L 450.0391,594.6558 L 452.41,601.5842 L 454.3764,605.0779 L 456.1315,608.2734 L 460.941,616.5258 L 466.2625,606.6875 L 468.0888,595.3873 L 470.1935,603.0063 L 472.5447,611.13 L 474.9101,607.5036 L 476.8278,594.6737 L 479.6563,606.0176 L 481.6147,621.1973 L 483.7448,606.0669 L 486.159,598.2863 L 488.7521,605.1826 L 494.2829,619.2716 L 497.0599,602.2275 L 498.991,598.6561 L 501.1412,606.0639 L 504.0357,614.3149 L 507.6623,596.1928 L 509.5702,602.711 L 511.5376,609.67 L 515.4515,616.7573 L 519.7509,610.9623 L 521.9075,609.4494 L 524.4056,616.0528 L 526.6493,614.9614 L 528.6351,608.8225 L 530.839,611.1344 L 532.82,616.2381 L 535.2431,613.8959 L 538.3168,608.7383 L 540.8093,615.205 L 542.9134,615.9485 L 544.7212,610.6038 L 546.8641,608.4874 L 550.2282,615.6765 L 554.8455,616.0346 L 558.0115,609.5216 L 559.8026,609.2153 L 561.9354,614.5931 L 564.932,613.7672 L 567.1033,607.4288 L 569.1623,611.7109 L 571.509,619.5104 L 573.4889,613.0474 L 575.4558,606.9894 L 577.5694,611.8626 L 580.0977,620.3561 L 583.8889,614.0746 L 587.8041,607.9977 L 590.2208,612.3235 L 593.4158,615.2393 L 595.5292,608.5545 L 597.764,611.6679 L 600.4609,618.0869 L 602.2673,612.3359 L 605.2467,610.3325 L 607.4258,616.303 L 609.2806,615.6805 L 611.586,608.5381 L 614.0312,612.1631 L 617.7785,618.6495 L 621.9622,613.2392 L 625.0704,608.754 L 627.5762,615.5544 L 629.4712,615.7133 L 631.7598,609.1642 L 633.9559,610.7858 L 636.1291,616.7672 L 638.3672,613.5276 L 640.8956,606.1861 L 642.8365,613.2024 L 644.7691,619.6417 L 646.8958,613.2457 L 649.049,607.5732 L 651.5954,611.6336 L 655.0789,616.8416 L 660.6076,612.4986 L 662.575,606.5752 L 664.6472,613.1046 L 667.2961,616.0955 L 669.6418,608.6074 L 672.2666,613.0809 L 674.3754,618.6597 L 677.1071,609.8545 L 679.4974,611.1913 L 681.4723,616.3894 L 686.5846,613.3715 L 691.3535,609.352 L 693.5026,615.7983 L 696.4927,612.8217 L 698.2563,607.303 L 700.3129,612.9413 L 702.6317,617.479 L 704.9663,610.3114 L 707.3516,611.2256 L 709.5007,620.3794 L 711.4945,613.1918 L 713.4481,607.0303 L 715.9221,613.9043 L 719.2406,617.7999 L 723.0702,613.7606 L 729.2095,609.2743 L 731.3641,615.7188 L 734.3347,611.8254 L 736.5018,609.1828 L 738.6388,615.7968 L 741.4136,612.9522 L 744.3294,610.3373 L 746.4819,621.1638 L 750.0614,608.5297 L 751.8913,611.5177 L 754.7119,618.7611 L 759.0603,611.6081 L 762.965,606.7754 L 765.2201,613.3099 L 767.3249,617.1898 L 769.4834,609.965 L 772.0774,612.3761 L 774.1821,617.9756 L 776.875,608.879 L 778.8907,611.7762 L 780.8402,619.5476 L 782.7586,614.0947 L 784.8973,607.8128 L 786.9721,612.3075 L 789.2663,617.7696 L 791.5523,610.1849 L 794.2086,612.2306 L 796.5622,618.9398 L 800.2869,613.4551 L 804.73,607.1382 L 807.0721,614.0075 L 809.1613,616.1414 L 811.0879,609.7396 L 813.0966,611.5177 L 815.5792,617.4363 L 817.73,609.9099 L 819.7527,611.5352 L 821.6778,619.3533 L 824.6789,609.5052 L 826.4951,611.4772 L 830.4225,617.2923 L 835.0155,611.8969 L 839.3655,608.417 L 841.5744,615.7618 L 843.4292,614.887 L 845.521,607.6407 L 848.3789,616.9032 L 850.5649,612.6962 L 852.7443,610.2162 L 855.5727,616.9641 L 857.9012,608.7033 L 860.1512,615.0238 L 862.3732,614.1432 L 864.6559,608.8845 L 867.0381,616.5582 L 870.6411,613.5065 L 874.6161,607.6031 L 878.5075,616.4605 L 880.4874,613.9805 L 882.8039,610.3325 L 885.0559,617.4042 L 887.5112,608.4345 L 889.7691,616.4547 L 892.0994,614.4389 L 894.3653,609.8188 L 896.4549,618.5427 L 898.227,612.1857 L 900.8324,615.3968 L 902.8284,614.1701 L 905.5567,614.6569 L 907.7497,614.2784 L 910.3069,613.7136 L 913.7087,613.2282 L 918.5348,616.6873 L 922.5647,616.0514 L 926.0456,612.7228 L 929.6209,614.8057 L 930.0,630.0 L 930.0,630.0 L 929.6209,611.5155 L 926.0456,609.5245 L 922.5647,612.6565 L 918.5348,613.5094 L 913.7087,609.7848 L 910.3069,610.5791 L 907.7497,610.8146 L 905.5567,611.4688 L 902.8284,610.7089 L 900.8324,612.224 L 898.227,608.7678 L 896.4549,614.9589 L 894.3653,606.6715 L 892.0994,611.0236 L 889.7691,613.3074 L 887.5112,605.0294 L 885.0559,614.0936 L 882.8039,607.1776 L 880.4874,610.726 L 878.5075,613.2622 L 874.6161,604.1751 L 870.6411,610.0375 L 867.0381,613.4109 L 864.6559,605.7551 L 862.3732,610.9882 L 860.1512,611.8484 L 857.9012,605.1578 L 855.5727,613.6636 L 852.7443,607.0459 L 850.5649,609.3115 L 848.3789,613.7508 L 845.521,604.2177 L 843.4292,611.3671 L 841.5744,612.5839 L 839.3655,605.2366 L 835.0155,608.4407 L 830.4225,613.7774 L 826.4951,608.3222 L 824.6789,605.9188 L 821.6778,615.8767 L 819.7527,608.3496 L 817.73,606.4665 L 815.5792,614.2048 L 813.0966,608.3168 L 811.0879,606.2069 L 809.1613,612.7031 L 807.0721,610.8679 L 804.73,603.585 L 800.2869,609.8942 L 796.5622,615.4121 L 794.2086,609.0756 L 791.5523,606.6828 L 789.2663,614.4232 L 786.9721,609.0964 L 784.8973,604.4843 L 782.7586,610.858 L 780.8402,616.066 L 778.8907,608.6034 L 776.875,605.3744 L 774.1821,614.4991 L 772.0774,609.2236 L 769.4834,606.4399 L 767.3249,613.7209 L 765.2201,610.1754 L 762.965,603.3345 L 759.0603,608.1239 L 754.7119,615.2207 L 751.8913,608.3397 L 750.0614,605.1093 L 746.4819,617.6361 L 744.3294,607.19 L 741.4136,609.7641 L 738.6388,612.5883 L 736.5018,606.0483 L 734.3347,608.3973 L 731.3641,612.5613 L 729.2095,606.1015 L 723.0702,610.3555 L 719.2406,614.2697 L 715.9221,610.7672 L 713.4481,603.7707 L 711.4945,609.6692 L 709.5007,616.8671 L 707.3516,608.0272 L 704.9663,606.8042 L 702.6317,613.9692 L 700.3129,609.794 L 698.2563,604.0383 L 696.4927,609.437 L 693.5026,612.6076 L 691.3535,606.1741 L 686.5846,609.9869 L 681.4723,613.2319 L 679.4974,608.0363 L 677.1071,606.6153 L 674.3754,615.4971 L 672.2666,609.9004 L 669.6418,605.0746 L 667.2961,612.5525 L 664.6472,609.9318 L 662.575,603.4228 L 660.6076,609.0909 L 655.0789,613.6611 L 651.5954,608.4761 L 649.049,604.186 L 646.8958,609.9734 L 644.7691,616.1396 L 642.8365,610.0117 L 640.8956,603.0388 L 638.3672,610.3191 L 636.1291,613.6148 L 633.9559,607.5926 L 631.7598,605.8459 L 629.4712,612.275 L 627.5762,612.4147 L 625.0704,605.5888 L 621.9622,609.8749 L 617.7785,615.0683 L 614.0312,608.9903 L 611.586,605.087 L 609.2806,612.2422 L 607.4258,613.1404 L 605.2467,607.1597 L 602.2673,608.7496 L 600.4609,614.5873 L 597.764,608.4772 L 595.5292,604.9299 L 593.4158,611.8725 L 590.2208,609.1584 L 587.8041,604.4675 L 583.8889,610.5648 L 580.0977,617.0965 L 577.5694,608.7587 L 575.4558,603.3801 L 573.4889,609.8541 L 571.509,616.1947 L 569.1623,608.5279 L 567.1033,604.0441 L 564.932,610.4438 L 561.9354,611.3948 L 559.8026,606.0552 L 558.0115,606.0016 L 554.8455,612.5044 L 550.2282,612.5215 L 546.8641,605.312 L 544.7212,607.1145 L 542.9134,612.4081 L 540.8093,612.0347 L 538.3168,605.5629 L 535.2431,610.3862 L 532.82,613.0908 L 530.839,607.9846 L 528.6351,605.2413 L 526.6493,611.5359 L 524.4056,612.8877 L 521.9075,606.2689 L 519.7509,607.5138 L 515.4515,613.2782 L 511.5376,606.515 L 509.5702,599.5381 L 507.6623,593.0047 L 504.0357,610.8485 L 501.1412,602.9141 L 498.991,595.4909 L 497.0599,598.7968 L 494.2829,616.1115 L 488.7521,602.0123 L 486.159,595.1135 L 483.7448,602.5367 L 481.6147,617.902 L 479.6563,602.8525 L 476.8278,591.5034 L 474.9101,604.3614 L 472.5447,607.9776 L 470.1935,599.8514 L 468.0888,592.0128 L 466.2625,603.3028 L 460.941,613.0824 L 456.1315,605.1031 L 454.3764,601.9255 L 452.41,598.4548 L 450.0391,591.4856 L 448.1042,598.2699 L 445.6955,607.0215 L 443.6055,615.9092 L 441.1065,605.5928 L 438.5766,600.7043 L 436.3737,595.5773 L 434.1707,595.7848 L 431.7902,609.2182 L 429.0389,605.315 L 424.4777,597.8586 L 421.9063,593.652 L 419.6752,607.6316 L 417.3221,606.8571 L 415.1742,600.425 L 413.0457,592.7582 L 410.5207,604.8511 L 408.1842,608.7212 L 406.0921,602.9436 L 404.1017,598.3716 L 401.2855,596.5232 L 398.6933,612.4603 L 395.7268,607.4296 L 392.2899,601.6524 L 389.7126,594.5278 L 387.8095,600.4965 L 385.6954,616.68 L 383.1835,602.5181 L 380.8915,595.4661 L 378.3631,600.2204 L 375.3482,615.9296 L 373.2011,602.5385 L 371.456,596.6497 L 369.2274,597.9526 L 365.7528,611.4677 L 362.9163,605.6457 L 360.3282,597.3827 L 358.2206,597.6927 L 356.1588,612.6484 L 352.7005,599.948 L 350.3042,595.4005 L 348.2024,611.2744 L 345.6822,603.0902 L 342.8979,592.4391 L 340.079,606.5672 L 336.1178,605.6172 L 334.1626,598.7071 L 332.0689,595.4278 L 329.6139,613.8616 L 327.4697,602.944 L 325.3517,595.3348 L 322.9552,604.0657 L 321.1636,608.8871 L 316.6804,600.1296 L 313.8323,593.9006 L 311.6042,608.6909 L 309.273,605.2019 L 306.2932,595.5726 L 303.9454,602.2395 L 301.084,606.686 L 298.573,597.9723 L 296.6762,594.1734 L 294.42,609.8797 L 291.5695,606.1609 L 288.4799,597.9957 L 286.4135,596.4795 L 283.8071,617.421 L 281.831,601.9675 L 279.5955,591.949 L 277.3634,607.2946 L 275.0689,605.2887 L 273.1464,598.6794 L 271.0772,594.7769 L 269.0,606.4742 L 266.3777,607.0299 L 263.3394,599.4051 L 261.5032,593.0663 L 259.3142,602.7795 L 257.0481,612.5525 L 254.7026,604.8759 L 252.0386,596.9736 L 249.6492,596.0627 L 247.945,605.6151 L 245.0875,604.2772 L 242.8595,595.2517 L 240.5253,601.652 L 237.6196,608.6672 L 234.3029,601.8971 L 231.9877,596.428 L 229.7175,599.7934 L 226.8727,608.0064 L 225.1122,601.5404 L 222.5646,594.0144 L 220.5154,608.3671 L 218.2187,605.4973 L 215.8168,596.191 L 213.7918,598.7531 L 211.1581,609.2798 L 208.1028,601.92 L 205.9408,594.9082 L 204.0998,600.4191 L 202.2474,614.2183 L 199.7518,601.3789 L 196.5647,597.5289 L 194.2909,607.1699 L 192.3246,608.1822 L 190.2262,599.7686 L 188.3708,593.9254 L 185.9213,610.8259 L 182.6602,602.684 L 179.9098,596.0718 L 177.2029,617.0126 L 175.5065,604.4051 L 172.4474,596.1082 L 169.6388,608.692 L 167.5347,599.4543 L 165.3672,599.0648 L 163.0884,608.3849 L 160.6748,597.382 L 158.3398,604.6608 L 155.2819,605.8554 L 152.8372,593.963 L 150.5236,610.0693 L 148.4258,603.6828 L 146.2663,593.7201 L 144.1314,605.8218 L 142.1093,607.1298 L 140.0529,597.6923 L 136.8103,611.4075 L 134.7958,603.0242 L 133.0004,593.0543 L 130.105,608.731 L 128.0723,598.6951 L 125.5885,606.9617 L 123.705,605.6566 L 121.6822,593.6093 L 119.3788,615.7122 L 116.8316,597.5621 L 114.5546,605.7489 L 112.6473,604.9014 L 110.2841,595.3877 L 108.4908,614.4338 L 106.4886,600.402 L 103.4994,609.6222 L 101.8501,599.5126 L 99.81278,611.0976 L 97.67613,599.9054 L 95.15372,607.0142 L 92.6433,615.3312 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#188b19'>-<path d='M 90.0,630.0 L 92.6433,621.737 L 95.15372,613.1374 L 97.67613,606.0475 L 99.81278,617.2591 L 101.8501,605.6727 L 103.4994,615.7812 L 106.4886,606.5978 L 108.4908,620.8717 L 110.2841,601.5324 L 112.6473,611.0666 L 114.5546,611.9089 L 116.8316,603.6864 L 119.3788,621.8942 L 121.6822,599.7949 L 123.705,611.7835 L 125.5885,613.4138 L 128.0723,604.8311 L 130.105,614.914 L 133.0004,599.2399 L 134.7958,609.1832 L 136.8103,617.6179 L 140.0529,603.8396 L 142.1093,613.2873 L 144.1314,612.1686 L 146.2663,599.8572 L 148.4258,609.853 L 150.5236,616.4547 L 152.8372,600.1179 L 155.2819,611.9797 L 158.3398,610.8081 L 160.6748,603.5548 L 163.0884,614.5246 L 165.3672,605.5053 L 167.5347,605.5914 L 169.6388,614.7999 L 172.4474,602.253 L 175.5065,610.5626 L 177.2029,623.2047 L 179.9098,602.4298 L 182.6602,608.8287 L 185.9213,617.1843 L 188.3708,600.2616 L 190.2262,605.9082 L 192.3246,614.3193 L 194.2909,613.4762 L 196.5647,603.7043 L 199.7518,607.5313 L 202.2474,620.5843 L 204.0998,606.8301 L 205.9408,601.0401 L 208.1028,608.0827 L 211.1581,615.4399 L 213.7918,605.2526 L 215.8168,602.3026 L 218.2187,611.6511 L 220.5154,614.5271 L 222.5646,600.1515 L 225.1122,607.6826 L 226.8727,614.1501 L 229.7175,606.0439 L 231.9877,602.5753 L 234.3029,608.0469 L 237.6196,614.8349 L 240.5253,607.8121 L 242.8595,601.4066 L 245.0875,610.4142 L 247.945,612.1029 L 249.6492,602.5305 L 252.0386,603.1019 L 254.7026,611.0411 L 257.0481,619.0864 L 259.3142,609.1055 L 261.5032,599.21 L 263.3394,605.5421 L 266.3777,613.1823 L 269.0,612.9828 L 271.0772,601.1342 L 273.1464,604.8318 L 275.0689,611.459 L 277.3634,613.4791 L 279.5955,598.104 L 281.831,608.102 L 283.8071,623.9049 L 286.4135,602.6793 L 288.4799,604.1761 L 291.5695,612.3235 L 294.42,615.9989 L 296.6762,600.359 L 298.573,604.1554 L 301.084,612.8665 L 303.9454,608.6428 L 306.2932,601.7505 L 309.273,611.3569 L 311.6042,615.0376 L 313.8323,600.3145 L 316.6804,606.2718 L 321.1636,615.0241 L 322.9552,610.5123 L 325.3517,601.5102 L 327.4697,609.0785 L 329.6139,620.3072 L 332.0689,601.8376 L 334.1626,604.8799 L 336.1178,611.739 L 340.079,612.7323 L 342.8979,598.7487 L 345.6822,609.2605 L 348.2024,617.5774 L 350.3042,601.8705 L 352.7005,606.0953 L 356.1588,619.0262 L 358.2206,604.0689 L 360.3282,603.5238 L 362.9163,611.7828 L 365.7528,618.0624 L 369.2274,604.5025 L 371.456,602.8124 L 373.2011,608.6413 L 375.3482,622.3956 L 378.3631,606.3907 L 380.8915,601.5944 L 383.1835,608.6577 L 385.6954,622.8656 L 387.8095,606.9216 L 389.7126,600.6894 L 392.2899,607.8278 L 395.7268,613.5845 L 398.6933,618.6732 L 401.2855,602.9166 L 404.1017,604.5649 L 406.0921,609.0552 L 408.1842,614.9169 L 410.5207,611.0739 L 413.0457,598.9387 L 415.1742,606.5672 L 417.3221,612.9737 L 419.6752,614.0476 L 421.9063,599.7967 L 424.4777,604.0135 L 429.0389,611.4801 L 431.7902,615.5416 L 434.1707,602.2373 L 436.3737,601.7169 L 438.5766,606.8618 L 441.1065,611.7299 L 443.6055,622.2946 L 445.6955,613.4029 L 448.1042,604.745 L 450.0391,597.6431 L 452.41,604.5714 L 454.3764,608.0651 L 456.1315,611.2606 L 460.941,619.529 L 466.2625,609.6908 L 468.0888,598.3877 L 470.1935,605.9936 L 472.5447,614.1173 L 474.9101,610.4908 L 476.8278,597.6609 L 479.6563,609.0049 L 481.6147,624.1962 L 483.7448,609.076 L 486.159,601.2735 L 488.7521,608.1698 L 494.2829,622.2588 L 497.0599,605.2322 L 498.991,601.6433 L 501.1412,609.0512 L 504.0357,617.3196 L 507.6623,599.1815 L 509.5702,605.6982 L 511.5376,612.6572 L 515.4515,619.7635 L 519.7509,613.967 L 521.9075,612.4366 L 524.4056,619.04 L 526.6493,617.9676 L 528.6351,611.8345 L 530.839,614.1216 L 532.82,619.2253 L 535.2431,616.9021 L 538.3168,611.7255 L 540.8093,618.1922 L 542.9134,618.962 L 544.7212,613.6129 L 546.8641,611.4746 L 550.2282,618.6637 L 554.8455,619.0466 L 558.0115,612.5321 L 559.8026,612.2025 L 561.9354,617.5804 L 564.932,616.769 L 567.1033,610.4306 L 569.1623,614.6982 L 571.509,622.505 L 573.4889,616.0361 L 575.4558,610.0029 L 577.5694,614.8513 L 580.0977,623.3477 L 583.8889,617.0852 L 587.8041,611.0097 L 590.2208,615.3108 L 593.4158,618.2396 L 595.5292,611.5694 L 597.764,614.6551 L 600.4609,621.0974 L 602.2673,615.3465 L 605.2467,613.3198 L 607.4258,619.2902 L 609.2806,618.6867 L 611.586,611.5414 L 614.0312,615.1503 L 617.7785,621.663 L 621.9622,616.2395 L 625.0704,611.7412 L 627.5762,618.5416 L 629.4712,618.7166 L 631.7598,612.1616 L 633.9559,613.7745 L 636.1291,619.7544 L 638.3672,616.5148 L 640.8956,609.1733 L 642.8365,616.1896 L 644.7691,622.6537 L 646.8958,616.2432 L 649.049,610.578 L 651.5954,614.6208 L 655.0789,619.8288 L 660.6076,615.5033 L 662.575,609.5624 L 664.6472,616.0918 L 667.2961,619.1031 L 669.6418,611.6194 L 672.2666,616.0681 L 674.3754,621.6469 L 677.1071,612.8461 L 679.4974,614.1785 L 681.4723,619.3766 L 686.5846,616.3748 L 691.3535,612.3392 L 693.5026,618.7855 L 696.4927,615.822 L 698.2563,610.2961 L 700.3129,615.9285 L 702.6317,620.4895 L 704.9663,613.3234 L 707.3516,614.2128 L 709.5007,623.3929 L 711.4945,616.2023 L 713.4481,610.0262 L 715.9221,616.8915 L 719.2406,620.8119 L 723.0702,616.7654 L 729.2095,612.263 L 731.3641,618.706 L 734.3347,614.8302 L 736.5018,612.17 L 738.6388,618.7841 L 741.4136,615.9394 L 744.3294,613.3245 L 746.4819,624.1743 L 750.0614,611.5359 L 751.8913,614.5049 L 754.7119,621.7717 L 759.0603,614.6201 L 762.965,609.783 L 765.2201,616.2971 L 767.3249,620.196 L 769.4834,612.9755 L 772.0774,615.3633 L 774.1821,620.9818 L 776.875,611.8896 L 778.8907,614.7634 L 780.8402,622.5582 L 782.7586,617.0833 L 784.8973,610.8102 L 786.9721,615.2947 L 789.2663,620.77 L 791.5523,613.1954 L 794.2086,615.2178 L 796.5622,621.9503 L 800.2869,616.4656 L 804.73,610.1473 L 807.0721,616.9947 L 809.1613,619.1462 L 811.0879,612.7516 L 813.0966,614.5049 L 815.5792,620.4279 L 817.73,612.9161 L 819.7527,614.5224 L 821.6778,622.3638 L 824.6789,612.5186 L 826.4951,614.4659 L 830.4225,620.3014 L 835.0155,614.9031 L 839.3655,611.4043 L 841.5744,618.7491 L 843.4292,617.8961 L 845.521,610.6469 L 848.3789,619.8904 L 850.5649,615.698 L 852.7443,613.2034 L 855.5727,619.9601 L 857.9012,611.7138 L 860.1512,618.011 L 862.3732,617.1304 L 864.6559,611.8732 L 867.0381,619.5455 L 870.6411,616.5141 L 874.6161,610.6064 L 878.5075,619.4477 L 880.4874,616.9721 L 882.8039,613.3198 L 885.0559,620.4046 L 887.5112,611.4378 L 889.7691,619.4419 L 892.0994,617.4436 L 894.3653,612.806 L 896.4549,621.5518 L 898.227,615.1919 L 900.8324,618.384 L 902.8284,617.1792 L 905.5567,617.6442 L 907.7497,617.2875 L 910.3069,616.7008 L 913.7087,616.2359 L 918.5348,619.6745 L 922.5647,619.0561 L 926.0456,615.7101 L 929.6209,617.8002 L 930.0,630.0 L 930.0,630.0 L 929.6209,614.8057 L 926.0456,612.7228 L 922.5647,616.0514 L 918.5348,616.6873 L 913.7087,613.2282 L 910.3069,613.7136 L 907.7497,614.2784 L 905.5567,614.6569 L 902.8284,614.1701 L 900.8324,615.3968 L 898.227,612.1857 L 896.4549,618.5427 L 894.3653,609.8188 L 892.0994,614.4389 L 889.7691,616.4547 L 887.5112,608.4345 L 885.0559,617.4042 L 882.8039,610.3325 L 880.4874,613.9805 L 878.5075,616.4605 L 874.6161,607.6031 L 870.6411,613.5065 L 867.0381,616.5582 L 864.6559,608.8845 L 862.3732,614.1432 L 860.1512,615.0238 L 857.9012,608.7033 L 855.5727,616.9641 L 852.7443,610.2162 L 850.5649,612.6962 L 848.3789,616.9032 L 845.521,607.6407 L 843.4292,614.887 L 841.5744,615.7618 L 839.3655,608.417 L 835.0155,611.8969 L 830.4225,617.2923 L 826.4951,611.4772 L 824.6789,609.5052 L 821.6778,619.3533 L 819.7527,611.5352 L 817.73,609.9099 L 815.5792,617.4363 L 813.0966,611.5177 L 811.0879,609.7396 L 809.1613,616.1414 L 807.0721,614.0075 L 804.73,607.1382 L 800.2869,613.4551 L 796.5622,618.9398 L 794.2086,612.2306 L 791.5523,610.1849 L 789.2663,617.7696 L 786.9721,612.3075 L 784.8973,607.8128 L 782.7586,614.0947 L 780.8402,619.5476 L 778.8907,611.7762 L 776.875,608.879 L 774.1821,617.9756 L 772.0774,612.3761 L 769.4834,609.965 L 767.3249,617.1898 L 765.2201,613.3099 L 762.965,606.7754 L 759.0603,611.6081 L 754.7119,618.7611 L 751.8913,611.5177 L 750.0614,608.5297 L 746.4819,621.1638 L 744.3294,610.3373 L 741.4136,612.9522 L 738.6388,615.7968 L 736.5018,609.1828 L 734.3347,611.8254 L 731.3641,615.7188 L 729.2095,609.2743 L 723.0702,613.7606 L 719.2406,617.7999 L 715.9221,613.9043 L 713.4481,607.0303 L 711.4945,613.1918 L 709.5007,620.3794 L 707.3516,611.2256 L 704.9663,610.3114 L 702.6317,617.479 L 700.3129,612.9413 L 698.2563,607.303 L 696.4927,612.8217 L 693.5026,615.7983 L 691.3535,609.352 L 686.5846,613.3715 L 681.4723,616.3894 L 679.4974,611.1913 L 677.1071,609.8545 L 674.3754,618.6597 L 672.2666,613.0809 L 669.6418,608.6074 L 667.2961,616.0955 L 664.6472,613.1046 L 662.575,606.5752 L 660.6076,612.4986 L 655.0789,616.8416 L 651.5954,611.6336 L 649.049,607.5732 L 646.8958,613.2457 L 644.7691,619.6417 L 642.8365,613.2024 L 640.8956,606.1861 L 638.3672,613.5276 L 636.1291,616.7672 L 633.9559,610.7858 L 631.7598,609.1642 L 629.4712,615.7133 L 627.5762,615.5544 L 625.0704,608.754 L 621.9622,613.2392 L 617.7785,618.6495 L 614.0312,612.1631 L 611.586,608.5381 L 609.2806,615.6805 L 607.4258,616.303 L 605.2467,610.3325 L 602.2673,612.3359 L 600.4609,618.0869 L 597.764,611.6679 L 595.5292,608.5545 L 593.4158,615.2393 L 590.2208,612.3235 L 587.8041,607.9977 L 583.8889,614.0746 L 580.0977,620.3561 L 577.5694,611.8626 L 575.4558,606.9894 L 573.4889,613.0474 L 571.509,619.5104 L 569.1623,611.7109 L 567.1033,607.4288 L 564.932,613.7672 L 561.9354,614.5931 L 559.8026,609.2153 L 558.0115,609.5216 L 554.8455,616.0346 L 550.2282,615.6765 L 546.8641,608.4874 L 544.7212,610.6038 L 542.9134,615.9485 L 540.8093,615.205 L 538.3168,608.7383 L 535.2431,613.8959 L 532.82,616.2381 L 530.839,611.1344 L 528.6351,608.8225 L 526.6493,614.9614 L 524.4056,616.0528 L 521.9075,609.4494 L 519.7509,610.9623 L 515.4515,616.7573 L 511.5376,609.67 L 509.5702,602.711 L 507.6623,596.1928 L 504.0357,614.3149 L 501.1412,606.0639 L 498.991,598.6561 L 497.0599,602.2275 L 494.2829,619.2716 L 488.7521,605.1826 L 486.159,598.2863 L 483.7448,606.0669 L 481.6147,621.1973 L 479.6563,606.0176 L 476.8278,594.6737 L 474.9101,607.5036 L 472.5447,611.13 L 470.1935,603.0063 L 468.0888,595.3873 L 466.2625,606.6875 L 460.941,616.5258 L 456.1315,608.2734 L 454.3764,605.0779 L 452.41,601.5842 L 450.0391,594.6558 L 448.1042,601.7388 L 445.6955,610.4011 L 443.6055,619.2913 L 441.1065,608.7427 L 438.5766,603.8746 L 436.3737,598.7297 L 434.1707,599.2282 L 431.7902,612.5442 L 429.0389,608.4929 L 424.4777,601.0263 L 421.9063,596.8095 L 419.6752,611.0443 L 417.3221,609.9865 L 415.1742,603.5799 L 413.0457,595.9514 L 410.5207,608.0852 L 408.1842,611.9297 L 406.0921,606.068 L 404.1017,601.5776 L 401.2855,599.9105 L 398.6933,615.6816 L 395.7268,610.5973 L 392.2899,604.8405 L 389.7126,597.7007 L 387.8095,603.9169 L 385.6954,619.8784 L 383.1835,605.6705 L 380.8915,598.6057 L 378.3631,603.4034 L 375.3482,619.3908 L 373.2011,605.6526 L 371.456,599.8251 L 369.2274,601.4905 L 365.7528,615.0489 L 362.9163,608.7955 L 360.3282,600.5351 L 358.2206,601.0671 L 356.1588,616.0229 L 352.7005,603.1081 L 350.3042,598.8643 L 348.2024,614.58 L 345.6822,606.2733 L 342.8979,595.7498 L 340.079,609.7451 L 336.1178,608.7518 L 334.1626,601.8927 L 332.0689,598.8329 L 329.6139,617.3025 L 327.4697,606.0913 L 325.3517,598.523 L 322.9552,607.5091 L 321.1636,612.0369 L 316.6804,603.2846 L 313.8323,597.3083 L 311.6042,612.0373 L 309.273,608.3696 L 306.2932,598.7633 L 303.9454,605.6395 L 301.084,609.8793 L 298.573,601.1681 L 296.6762,597.3718 L 294.42,613.0116 L 291.5695,609.3363 L 288.4799,601.1889 L 286.4135,599.6906 L 283.8071,620.9001 L 281.831,605.1148 L 279.5955,595.1168 L 277.3634,610.4904 L 275.0689,608.4717 L 273.1464,601.8446 L 271.0772,598.131 L 269.0,609.9737 L 266.3777,610.1951 L 263.3394,602.5549 L 261.5032,596.2213 L 259.3142,606.1081 L 257.0481,616.0802 L 254.7026,608.0538 L 252.0386,600.1132 L 249.6492,599.5214 L 247.945,609.0967 L 245.0875,607.427 L 242.8595,598.4194 L 240.5253,604.8249 L 237.6196,611.8477 L 234.3029,605.0597 L 231.9877,599.5881 L 229.7175,603.0479 L 226.8727,611.1614 L 225.1122,604.6954 L 222.5646,597.1643 L 220.5154,611.5399 L 218.2187,608.6624 L 215.8168,599.3153 L 213.7918,602.245 L 211.1581,612.4526 L 208.1028,605.0954 L 205.9408,598.0529 L 204.0998,603.8268 L 202.2474,617.5825 L 199.7518,604.5441 L 196.5647,600.7171 L 194.2909,610.4831 L 192.3246,611.3321 L 190.2262,602.921 L 188.3708,597.2642 L 185.9213,614.1825 L 182.6602,605.8415 L 179.9098,599.4309 L 177.2029,620.216 L 175.5065,607.5754 L 172.4474,599.2658 L 169.6388,611.8112 L 167.5347,602.6041 L 165.3672,602.5006 L 163.0884,611.5374 L 160.6748,600.5676 L 158.3398,607.8208 L 155.2819,608.9925 L 152.8372,597.1307 L 150.5236,613.4514 L 148.4258,606.8658 L 146.2663,596.87 L 144.1314,609.1682 L 142.1093,610.3001 L 140.0529,600.8524 L 136.8103,614.6263 L 134.7958,606.1945 L 133.0004,596.2526 L 130.105,611.9268 L 128.0723,601.8424 L 125.5885,610.4077 L 123.705,608.7963 L 121.6822,596.8076 L 119.3788,618.9055 L 116.8316,600.6992 L 114.5546,608.9217 L 112.6473,608.0794 L 110.2841,598.5452 L 108.4908,617.867 L 106.4886,603.6106 L 103.4994,612.7925 L 101.8501,602.6855 L 99.81278,614.2704 L 97.67613,603.0603 L 95.15372,610.1488 L 92.6433,618.7337 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5e65cd'>-<path d='M 90.0,630.0 L 92.6433,622.0192 L 95.15372,613.6997 L 97.67613,608.5735 L 99.81278,619.191 L 101.8501,608.4382 L 103.4994,615.8348 L 106.4886,609.2813 L 108.4908,622.0346 L 110.2841,606.4104 L 112.6473,612.4942 L 114.5546,615.147 L 116.8316,607.349 L 119.3788,622.8273 L 121.6822,605.1826 L 123.705,613.047 L 125.5885,616.4463 L 128.0723,608.1293 L 130.105,615.193 L 133.0004,604.9372 L 134.7958,611.2803 L 136.8103,619.8682 L 140.0529,607.5415 L 142.1093,614.0553 L 144.1314,615.5937 L 146.2663,605.2034 L 148.4258,611.6548 L 150.5236,619.0419 L 152.8372,605.4313 L 155.2819,613.1688 L 158.3398,614.5669 L 160.6748,607.4755 L 163.0884,614.9184 L 165.3672,610.3088 L 167.5347,608.8568 L 169.6388,615.1139 L 172.4474,607.784 L 175.5065,612.2856 L 177.2029,623.7112 L 179.9098,607.9215 L 182.6602,611.0845 L 185.9213,619.6873 L 188.3708,606.1952 L 190.2262,609.084 L 192.3246,614.7995 L 194.2909,616.7745 L 196.5647,608.9706 L 199.7518,610.2312 L 202.2474,622.2986 L 204.0998,611.4444 L 205.9408,605.6971 L 208.1028,610.5681 L 211.1581,615.5646 L 213.7918,610.2618 L 215.8168,606.7189 L 218.2187,613.0043 L 220.5154,617.5957 L 222.5646,606.0949 L 225.1122,610.2709 L 226.8727,614.7003 L 229.7175,610.8912 L 231.9877,606.8067 L 234.3029,610.5083 L 237.6196,615.116 L 240.5253,612.3082 L 242.8595,605.9804 L 245.0875,612.1842 L 247.945,615.7753 L 249.6492,608.1895 L 252.0386,607.2348 L 254.7026,612.5824 L 257.0481,621.3104 L 259.3142,613.3238 L 261.5032,605.0265 L 263.3394,608.8481 L 266.3777,614.064 L 269.0,616.4058 L 271.0772,606.9945 L 273.1464,608.3926 L 275.0689,612.7695 L 277.3634,616.8671 L 279.5955,604.5386 L 281.831,610.6268 L 283.8071,624.0996 L 286.4135,608.312 L 288.4799,607.9711 L 291.5695,613.4645 L 294.42,618.8256 L 296.6762,606.4359 L 298.573,607.982 L 301.084,613.8106 L 303.9454,613.0361 L 306.2932,606.3812 L 309.273,612.7823 L 311.6042,618.0646 L 313.8323,606.3991 L 316.6804,609.3524 L 321.1636,615.2232 L 322.9552,614.5315 L 325.3517,606.1179 L 327.4697,611.2402 L 329.6139,622.2862 L 332.0689,607.6356 L 334.1626,608.4429 L 336.1178,613.031 L 340.079,616.3413 L 342.8979,605.2139 L 345.6822,611.3094 L 348.2024,620.0979 L 350.3042,607.6925 L 352.7005,609.3039 L 356.1588,621.2644 L 358.2206,609.4217 L 360.3282,607.532 L 362.9163,613.0178 L 365.7528,620.5512 L 369.2274,609.8115 L 371.456,607.0919 L 373.2011,610.9955 L 375.3482,623.4272 L 378.3631,611.3627 L 380.8915,606.2842 L 383.1835,610.9835 L 385.6954,623.7167 L 387.8095,611.677 L 389.7126,605.5717 L 392.2899,610.4095 L 395.7268,614.3021 L 398.6933,621.0558 L 401.2855,608.6315 L 404.1017,608.3346 L 406.0921,611.3208 L 408.1842,615.1882 L 410.5207,615.1357 L 413.0457,604.916 L 415.1742,609.6521 L 417.3221,613.9561 L 419.6752,617.3776 L 421.9063,606.1624 L 424.4777,607.8861 L 429.0389,612.9471 L 431.7902,618.539 L 434.1707,608.0363 L 436.3737,606.247 L 438.5766,609.787 L 441.1065,613.0623 L 443.6055,623.406 L 445.6955,616.9287 L 448.1042,610.1305 L 450.0391,604.3818 L 452.41,608.3379 L 454.3764,610.7092 L 456.1315,612.8435 L 460.941,621.7465 L 466.2625,614.0152 L 468.0888,605.1319 L 470.1935,609.2929 L 472.5447,614.7222 L 474.9101,614.6084 L 476.8278,604.3986 L 479.6563,611.2562 L 481.6147,624.3045 L 483.7448,613.4791 L 486.159,605.9545 L 488.7521,610.6093 L 494.2829,623.4261 L 497.0599,610.4372 L 498.991,606.2609 L 501.1412,611.2653 L 504.0357,619.9801 L 507.6623,605.0276 L 509.5702,608.9746 L 511.5376,613.6997 L 515.4515,621.784 L 519.7509,617.3167 L 521.9075,615.0905 L 524.4056,619.3956 L 526.6493,620.3896 L 528.6351,615.7039 L 530.839,616.1794 L 532.82,619.5228 L 535.2431,619.5287 L 538.3168,614.584 L 540.8093,618.841 L 542.9134,621.1587 L 544.7212,617.0151 L 546.8641,614.3802 L 550.2282,619.133 L 554.8455,621.24 L 558.0115,616.1969 L 559.8026,614.9592 L 561.9354,618.4555 L 564.932,619.4142 L 567.1033,614.5341 L 569.1623,616.5601 L 571.509,623.7947 L 573.4889,618.8508 L 575.4558,614.1971 L 577.5694,616.6169 L 580.0977,624.1572 L 583.8889,619.7019 L 587.8041,615.0333 L 590.2208,616.9342 L 593.4158,620.5916 L 595.5292,615.4037 L 597.764,616.5378 L 600.4609,622.8084 L 602.2673,618.3997 L 605.2467,615.7254 L 607.4258,619.5703 L 609.2806,620.8385 L 611.586,615.3122 L 614.0312,616.7694 L 617.7785,623.2273 L 621.9622,619.0149 L 625.0704,614.6445 L 627.5762,619.0153 L 629.4712,620.9526 L 631.7598,615.8723 L 633.9559,615.9766 L 636.1291,619.8168 L 638.3672,619.1961 L 640.8956,613.4747 L 642.8365,617.4925 L 644.7691,623.7685 L 646.8958,619.001 L 649.049,614.5993 L 651.5954,616.5276 L 655.0789,619.8715 L 660.6076,618.4012 L 662.575,613.8157 L 664.6472,617.4746 L 667.2961,621.2593 L 669.6418,615.457 L 672.2666,617.4706 L 674.3754,623.2277 L 677.1071,616.3697 L 679.4974,616.2264 L 681.4723,619.5221 L 686.5846,619.055 L 691.3535,614.8958 L 693.5026,619.2111 L 696.4927,618.663 L 698.2563,614.3339 L 700.3129,617.3331 L 702.6317,622.2497 L 704.9663,616.7562 L 707.3516,616.2486 L 709.5007,624.0854 L 711.4945,618.958 L 713.4481,614.1012 L 715.9221,617.98 L 719.2406,622.5097 L 723.0702,619.3657 L 729.2095,614.9509 L 731.3641,619.1502 L 734.3347,617.891 L 736.5018,614.8918 L 738.6388,619.2271 L 741.4136,618.7432 L 744.3294,615.5343 L 746.4819,624.3975 L 750.0614,615.3286 L 751.8913,616.4773 L 754.7119,623.266 L 759.0603,617.6843 L 762.965,613.9324 L 765.2201,617.5782 L 767.3249,621.9868 L 769.4834,616.3559 L 772.0774,617.0009 L 774.1821,622.6293 L 776.875,615.55 L 778.8907,616.6089 L 780.8402,623.6423 L 782.7586,619.6071 L 784.8973,614.661 L 786.9721,616.9356 L 789.2663,622.4514 L 791.5523,616.509 L 794.2086,616.8576 L 796.5622,623.3604 L 800.2869,619.0397 L 804.73,614.091 L 807.0721,618.0088 L 809.1613,621.1361 L 811.0879,616.063 L 813.0966,616.392 L 815.5792,622.1159 L 817.73,616.257 L 819.7527,616.3745 L 821.6778,623.5191 L 824.6789,615.9 L 826.4951,616.365 L 830.4225,622.0025 L 835.0155,617.7485 L 839.3655,614.4914 L 841.5744,619.1845 L 843.4292,620.1081 L 845.521,614.4287 L 848.3789,619.9473 L 850.5649,618.318 L 852.7443,615.4209 L 855.5727,621.6929 L 857.9012,615.1346 L 860.1512,618.6772 L 862.3732,619.4299 L 864.6559,614.689 L 867.0381,619.7095 L 870.6411,618.8891 L 874.6161,614.0381 L 878.5075,619.6523 L 880.4874,619.2344 L 882.8039,615.4508 L 885.0559,621.9175 L 887.5112,614.6901 L 889.7691,619.6421 L 892.0994,619.5188 L 894.3653,615.1273 L 896.4549,622.8043 L 898.227,617.6073 L 900.8324,618.8763 L 902.8284,619.1571 L 905.5567,618.364 L 907.7497,619.0761 L 910.3069,617.6296 L 913.7087,617.9107 L 918.5348,619.7785 L 922.5647,620.1468 L 926.0456,616.8303 L 929.6209,617.8232 L 930.0,630.0 L 930.0,630.0 L 929.6209,617.8002 L 926.0456,615.7101 L 922.5647,619.0561 L 918.5348,619.6745 L 913.7087,616.2359 L 910.3069,616.7008 L 907.7497,617.2875 L 905.5567,617.6442 L 902.8284,617.1792 L 900.8324,618.384 L 898.227,615.1919 L 896.4549,621.5518 L 894.3653,612.806 L 892.0994,617.4436 L 889.7691,619.4419 L 887.5112,611.4378 L 885.0559,620.4046 L 882.8039,613.3198 L 880.4874,616.9721 L 878.5075,619.4477 L 874.6161,610.6064 L 870.6411,616.5141 L 867.0381,619.5455 L 864.6559,611.8732 L 862.3732,617.1304 L 860.1512,618.011 L 857.9012,611.7138 L 855.5727,619.9601 L 852.7443,613.2034 L 850.5649,615.698 L 848.3789,619.8904 L 845.521,610.6469 L 843.4292,617.8961 L 841.5744,618.7491 L 839.3655,611.4043 L 835.0155,614.9031 L 830.4225,620.3014 L 826.4951,614.4659 L 824.6789,612.5186 L 821.6778,622.3638 L 819.7527,614.5224 L 817.73,612.9161 L 815.5792,620.4279 L 813.0966,614.5049 L 811.0879,612.7516 L 809.1613,619.1462 L 807.0721,616.9947 L 804.73,610.1473 L 800.2869,616.4656 L 796.5622,621.9503 L 794.2086,615.2178 L 791.5523,613.1954 L 789.2663,620.77 L 786.9721,615.2947 L 784.8973,610.8102 L 782.7586,617.0833 L 780.8402,622.5582 L 778.8907,614.7634 L 776.875,611.8896 L 774.1821,620.9818 L 772.0774,615.3633 L 769.4834,612.9755 L 767.3249,620.196 L 765.2201,616.2971 L 762.965,609.783 L 759.0603,614.6201 L 754.7119,621.7717 L 751.8913,614.5049 L 750.0614,611.5359 L 746.4819,624.1743 L 744.3294,613.3245 L 741.4136,615.9394 L 738.6388,618.7841 L 736.5018,612.17 L 734.3347,614.8302 L 731.3641,618.706 L 729.2095,612.263 L 723.0702,616.7654 L 719.2406,620.8119 L 715.9221,616.8915 L 713.4481,610.0262 L 711.4945,616.2023 L 709.5007,623.3929 L 707.3516,614.2128 L 704.9663,613.3234 L 702.6317,620.4895 L 700.3129,615.9285 L 698.2563,610.2961 L 696.4927,615.822 L 693.5026,618.7855 L 691.3535,612.3392 L 686.5846,616.3748 L 681.4723,619.3766 L 679.4974,614.1785 L 677.1071,612.8461 L 674.3754,621.6469 L 672.2666,616.0681 L 669.6418,611.6194 L 667.2961,619.1031 L 664.6472,616.0918 L 662.575,609.5624 L 660.6076,615.5033 L 655.0789,619.8288 L 651.5954,614.6208 L 649.049,610.578 L 646.8958,616.2432 L 644.7691,622.6537 L 642.8365,616.1896 L 640.8956,609.1733 L 638.3672,616.5148 L 636.1291,619.7544 L 633.9559,613.7745 L 631.7598,612.1616 L 629.4712,618.7166 L 627.5762,618.5416 L 625.0704,611.7412 L 621.9622,616.2395 L 617.7785,621.663 L 614.0312,615.1503 L 611.586,611.5414 L 609.2806,618.6867 L 607.4258,619.2902 L 605.2467,613.3198 L 602.2673,615.3465 L 600.4609,621.0974 L 597.764,614.6551 L 595.5292,611.5694 L 593.4158,618.2396 L 590.2208,615.3108 L 587.8041,611.0097 L 583.8889,617.0852 L 580.0977,623.3477 L 577.5694,614.8513 L 575.4558,610.0029 L 573.4889,616.0361 L 571.509,622.505 L 569.1623,614.6982 L 567.1033,610.4306 L 564.932,616.769 L 561.9354,617.5804 L 559.8026,612.2025 L 558.0115,612.5321 L 554.8455,619.0466 L 550.2282,618.6637 L 546.8641,611.4746 L 544.7212,613.6129 L 542.9134,618.962 L 540.8093,618.1922 L 538.3168,611.7255 L 535.2431,616.9021 L 532.82,619.2253 L 530.839,614.1216 L 528.6351,611.8345 L 526.6493,617.9676 L 524.4056,619.04 L 521.9075,612.4366 L 519.7509,613.967 L 515.4515,619.7635 L 511.5376,612.6572 L 509.5702,605.6982 L 507.6623,599.1815 L 504.0357,617.3196 L 501.1412,609.0512 L 498.991,601.6433 L 497.0599,605.2322 L 494.2829,622.2588 L 488.7521,608.1698 L 486.159,601.2735 L 483.7448,609.076 L 481.6147,624.1962 L 479.6563,609.0049 L 476.8278,597.6609 L 474.9101,610.4908 L 472.5447,614.1173 L 470.1935,605.9936 L 468.0888,598.3877 L 466.2625,609.6908 L 460.941,619.529 L 456.1315,611.2606 L 454.3764,608.0651 L 452.41,604.5714 L 450.0391,597.6431 L 448.1042,604.745 L 445.6955,613.4029 L 443.6055,622.2946 L 441.1065,611.7299 L 438.5766,606.8618 L 436.3737,601.7169 L 434.1707,602.2373 L 431.7902,615.5416 L 429.0389,611.4801 L 424.4777,604.0135 L 421.9063,599.7967 L 419.6752,614.0476 L 417.3221,612.9737 L 415.1742,606.5672 L 413.0457,598.9387 L 410.5207,611.0739 L 408.1842,614.9169 L 406.0921,609.0552 L 404.1017,604.5649 L 401.2855,602.9166 L 398.6933,618.6732 L 395.7268,613.5845 L 392.2899,607.8278 L 389.7126,600.6894 L 387.8095,606.9216 L 385.6954,622.8656 L 383.1835,608.6577 L 380.8915,601.5944 L 378.3631,606.3907 L 375.3482,622.3956 L 373.2011,608.6413 L 371.456,602.8124 L 369.2274,604.5025 L 365.7528,618.0624 L 362.9163,611.7828 L 360.3282,603.5238 L 358.2206,604.0689 L 356.1588,619.0262 L 352.7005,606.0953 L 350.3042,601.8705 L 348.2024,617.5774 L 345.6822,609.2605 L 342.8979,598.7487 L 340.079,612.7323 L 336.1178,611.739 L 334.1626,604.8799 L 332.0689,601.8376 L 329.6139,620.3072 L 327.4697,609.0785 L 325.3517,601.5102 L 322.9552,610.5123 L 321.1636,615.0241 L 316.6804,606.2718 L 313.8323,600.3145 L 311.6042,615.0376 L 309.273,611.3569 L 306.2932,601.7505 L 303.9454,608.6428 L 301.084,612.8665 L 298.573,604.1554 L 296.6762,600.359 L 294.42,615.9989 L 291.5695,612.3235 L 288.4799,604.1761 L 286.4135,602.6793 L 283.8071,623.9049 L 281.831,608.102 L 279.5955,598.104 L 277.3634,613.4791 L 275.0689,611.459 L 273.1464,604.8318 L 271.0772,601.1342 L 269.0,612.9828 L 266.3777,613.1823 L 263.3394,605.5421 L 261.5032,599.21 L 259.3142,609.1055 L 257.0481,619.0864 L 254.7026,611.0411 L 252.0386,603.1019 L 249.6492,602.5305 L 247.945,612.1029 L 245.0875,610.4142 L 242.8595,601.4066 L 240.5253,607.8121 L 237.6196,614.8349 L 234.3029,608.0469 L 231.9877,602.5753 L 229.7175,606.0439 L 226.8727,614.1501 L 225.1122,607.6826 L 222.5646,600.1515 L 220.5154,614.5271 L 218.2187,611.6511 L 215.8168,602.3026 L 213.7918,605.2526 L 211.1581,615.4399 L 208.1028,608.0827 L 205.9408,601.0401 L 204.0998,606.8301 L 202.2474,620.5843 L 199.7518,607.5313 L 196.5647,603.7043 L 194.2909,613.4762 L 192.3246,614.3193 L 190.2262,605.9082 L 188.3708,600.2616 L 185.9213,617.1843 L 182.6602,608.8287 L 179.9098,602.4298 L 177.2029,623.2047 L 175.5065,610.5626 L 172.4474,602.253 L 169.6388,614.7999 L 167.5347,605.5914 L 165.3672,605.5053 L 163.0884,614.5246 L 160.6748,603.5548 L 158.3398,610.8081 L 155.2819,611.9797 L 152.8372,600.1179 L 150.5236,616.4547 L 148.4258,609.853 L 146.2663,599.8572 L 144.1314,612.1686 L 142.1093,613.2873 L 140.0529,603.8396 L 136.8103,617.6179 L 134.7958,609.1832 L 133.0004,599.2399 L 130.105,614.914 L 128.0723,604.8311 L 125.5885,613.4138 L 123.705,611.7835 L 121.6822,599.7949 L 119.3788,621.8942 L 116.8316,603.6864 L 114.5546,611.9089 L 112.6473,611.0666 L 110.2841,601.5324 L 108.4908,620.8717 L 106.4886,606.5978 L 103.4994,615.7812 L 101.8501,605.6727 L 99.81278,617.2591 L 97.67613,606.0475 L 95.15372,613.1374 L 92.6433,621.737 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#53cb86'>-<path d='M 90.0,630.0 L 92.6433,622.346 L 95.15372,615.1642 L 97.67613,613.0959 L 99.81278,620.8305 L 101.8501,612.8749 L 103.4994,615.9226 L 106.4886,613.3128 L 108.4908,622.715 L 110.2841,612.2105 L 112.6473,614.5038 L 114.5546,618.1667 L 116.8316,612.4745 L 119.3788,623.2726 L 121.6822,611.3911 L 123.705,614.7922 L 125.5885,619.0539 L 128.0723,612.7443 L 130.105,615.5616 L 133.0004,611.2442 L 134.7958,614.0629 L 136.8103,621.3691 L 140.0529,612.4596 L 142.1093,615.1004 L 144.1314,618.4949 L 146.2663,611.4156 L 148.4258,614.0476 L 150.5236,620.8236 L 152.8372,611.5541 L 155.2819,614.6427 L 158.3398,617.809 L 160.6748,612.4771 L 163.0884,615.4676 L 165.3672,614.9366 L 167.5347,613.0105 L 169.6388,615.5354 L 172.4474,613.2377 L 175.5065,614.4392 L 177.2029,623.8866 L 179.9098,613.3296 L 182.6602,613.9528 L 185.9213,621.263 L 188.3708,612.154 L 190.2262,613.0992 L 192.3246,615.4034 L 194.2909,619.3274 L 196.5647,614.0596 L 199.7518,613.5827 L 202.2474,623.0209 L 204.0998,615.7203 L 205.9408,611.6088 L 208.1028,613.7121 L 211.1581,615.7381 L 213.7918,614.9261 L 215.8168,612.1653 L 218.2187,614.7332 L 220.5154,619.886 L 222.5646,612.1248 L 225.1122,613.5914 L 226.8727,615.3844 L 229.7175,615.3531 L 231.9877,612.0676 L 234.3029,613.5502 L 237.6196,615.4522 L 240.5253,616.3198 L 242.8595,611.7135 L 245.0875,614.3561 L 247.945,618.6546 L 249.6492,613.5393 L 252.0386,612.3695 L 254.7026,614.5537 L 257.0481,622.3828 L 259.3142,616.998 L 261.5032,611.3463 L 263.3394,612.9274 L 266.3777,615.1438 L 269.0,619.0754 L 271.0772,612.7345 L 273.1464,612.7961 L 275.0689,614.4349 L 277.3634,619.3963 L 279.5955,611.0717 L 281.831,613.7052 L 283.8071,624.1583 L 286.4135,613.6363 L 288.4799,612.6918 L 291.5695,614.9053 L 294.42,620.7076 L 296.6762,612.3746 L 298.573,612.6791 L 301.084,614.9636 L 303.9454,616.7996 L 306.2932,612.0409 L 309.273,614.5443 L 311.6042,620.1964 L 313.8323,612.3378 L 316.6804,613.1965 L 321.1636,615.4555 L 322.9552,617.8265 L 325.3517,611.8728 L 327.4697,613.9393 L 329.6139,623.0322 L 332.0689,613.1659 L 334.1626,612.8483 L 336.1178,614.6106 L 340.079,619.0473 L 342.8979,611.5264 L 345.6822,613.8518 L 348.2024,621.5678 L 350.3042,613.2027 L 352.7005,613.1878 L 356.1588,622.3496 L 358.2206,614.3849 L 360.3282,612.4807 L 362.9163,614.5483 L 365.7528,621.8807 L 369.2274,614.6343 L 371.456,612.294 L 373.2011,613.8602 L 375.3482,623.7557 L 378.3631,615.6951 L 380.8915,611.9859 L 383.1835,613.8066 L 385.6954,623.9741 L 387.8095,615.8927 L 389.7126,611.6635 L 392.2899,613.617 L 395.7268,615.2123 L 398.6933,622.2231 L 401.2855,613.8317 L 404.1017,612.8166 L 406.0921,614.009 L 408.1842,615.4935 L 410.5207,618.2447 L 413.0457,611.2197 L 415.1742,613.3519 L 417.3221,615.096 L 419.6752,619.7464 L 421.9063,612.1868 L 424.4777,612.5398 L 429.0389,614.7215 L 431.7902,620.5304 L 434.1707,613.4463 L 436.3737,611.8305 L 438.5766,613.3737 L 441.1065,614.6854 L 443.6055,623.7729 L 445.6955,619.4452 L 448.1042,614.8604 L 450.0391,610.9116 L 452.41,612.8399 L 454.3764,613.8055 L 456.1315,614.6945 L 460.941,622.6895 L 466.2625,617.4688 L 468.0888,611.4881 L 470.1935,613.2078 L 472.5447,615.4063 L 474.9101,617.8834 L 476.8278,610.99 L 479.6563,613.9623 L 481.6147,624.3341 L 483.7448,617.1223 L 486.159,611.6931 L 488.7521,613.5965 L 494.2829,623.7947 L 497.0599,615.0796 L 498.991,611.8371 L 501.1412,613.9896 L 504.0357,621.5029 L 507.6623,611.3784 L 509.5702,612.9263 L 511.5376,614.9764 L 515.4515,622.7015 L 519.7509,619.6855 L 521.9075,618.0063 L 524.4056,619.777 L 526.6493,621.7556 L 528.6351,618.6014 L 530.839,618.4661 L 532.82,619.8332 L 535.2431,621.1736 L 538.3168,617.7827 L 540.8093,619.5469 L 542.9134,622.2767 L 544.7212,619.4751 L 546.8641,617.5971 L 550.2282,619.664 L 554.8455,622.3343 L 558.0115,618.9175 L 559.8026,617.9552 L 561.9354,619.3967 L 564.932,621.0865 L 567.1033,617.7944 L 569.1623,618.6207 L 571.509,624.0649 L 573.4889,620.7164 L 575.4558,617.5505 L 577.5694,618.5955 L 580.0977,624.318 L 583.8889,621.294 L 587.8041,618.1496 L 590.2208,618.667 L 593.4158,621.8938 L 595.5292,618.3742 L 597.764,618.6021 L 600.4609,623.383 L 602.2673,620.4184 L 605.2467,618.2983 L 607.4258,619.8642 L 609.2806,622.0295 L 611.586,618.3064 L 614.0312,618.6134 L 617.7785,623.6598 L 621.9622,620.8185 L 625.0704,617.8411 L 627.5762,619.5265 L 629.4712,622.1381 L 631.7598,618.6987 L 633.9559,618.3891 L 636.1291,619.8904 L 638.3672,620.9486 L 640.8956,617.0687 L 642.8365,618.966 L 644.7691,624.0259 L 646.8958,620.8082 L 649.049,617.8177 L 651.5954,618.5974 L 655.0789,619.9232 L 660.6076,620.3907 L 662.575,617.3094 L 664.6472,618.9919 L 667.2961,622.3463 L 669.6418,618.4147 L 672.2666,619.008 L 674.3754,623.6711 L 677.1071,619.0339 L 679.4974,618.4821 L 681.4723,619.6833 L 686.5846,620.8185 L 691.3535,617.8174 L 693.5026,619.6855 L 696.4927,620.5851 L 698.2563,617.6507 L 700.3129,618.9142 L 702.6317,622.994 L 704.9663,619.2964 L 707.3516,618.5208 L 709.5007,624.2352 L 711.4945,620.778 L 713.4481,617.4728 L 715.9221,619.1819 L 719.2406,623.1664 L 723.0702,621.0489 L 729.2095,617.9468 L 731.3641,619.6519 L 734.3347,620.052 L 736.5018,617.906 L 738.6388,619.7289 L 741.4136,620.6398 L 744.3294,618.0402 L 746.4819,624.4434 L 750.0614,618.3155 L 751.8913,618.6309 L 754.7119,623.6821 L 759.0603,619.9127 L 762.965,617.3732 L 765.2201,619.0371 L 767.3249,622.8131 L 769.4834,619.0018 L 772.0774,618.8008 L 774.1821,623.2496 L 776.875,618.4384 L 778.8907,618.6386 L 780.8402,623.9271 L 782.7586,621.2137 L 784.8973,617.8538 L 786.9721,618.7848 L 789.2663,623.1391 L 791.5523,619.0984 L 794.2086,618.7396 L 796.5622,623.7455 L 800.2869,620.8086 L 804.73,617.4498 L 807.0721,619.187 L 809.1613,622.2359 L 811.0879,618.7782 L 813.0966,618.5565 L 815.5792,622.9002 L 817.73,618.9139 L 819.7527,618.539 L 821.6778,623.833 L 824.6789,618.6645 L 826.4951,618.5405 L 830.4225,622.8124 L 835.0155,619.9185 L 839.3655,617.6715 L 841.5744,619.6862 L 843.4292,621.5397 L 845.521,617.6617 L 848.3789,620.0151 L 850.5649,620.2966 L 852.7443,618.1233 L 855.5727,622.6103 L 857.9012,618.1361 L 860.1512,619.4816 L 862.3732,621.0584 L 864.6559,617.7215 L 867.0381,619.9178 L 870.6411,620.6781 L 874.6161,617.3058 L 878.5075,619.886 L 880.4874,620.9231 L 882.8039,618.0533 L 885.0559,622.7256 L 887.5112,617.7609 L 889.7691,619.8977 L 892.0994,621.0854 L 894.3653,617.9501 L 896.4549,623.3262 L 898.227,619.7573 L 900.8324,619.5644 L 902.8284,620.7948 L 905.5567,619.4036 L 907.7497,620.7247 L 910.3069,619.1068 L 913.7087,619.8292 L 918.5348,619.9812 L 922.5647,621.3778 L 926.0456,618.8763 L 929.6209,618.4599 L 930.0,630.0 L 930.0,630.0 L 929.6209,617.8232 L 926.0456,616.8303 L 922.5647,620.1468 L 918.5348,619.7785 L 913.7087,617.9107 L 910.3069,617.6296 L 907.7497,619.0761 L 905.5567,618.364 L 902.8284,619.1571 L 900.8324,618.8763 L 898.227,617.6073 L 896.4549,622.8043 L 894.3653,615.1273 L 892.0994,619.5188 L 889.7691,619.6421 L 887.5112,614.6901 L 885.0559,621.9175 L 882.8039,615.4508 L 880.4874,619.2344 L 878.5075,619.6523 L 874.6161,614.0381 L 870.6411,618.8891 L 867.0381,619.7095 L 864.6559,614.689 L 862.3732,619.4299 L 860.1512,618.6772 L 857.9012,615.1346 L 855.5727,621.6929 L 852.7443,615.4209 L 850.5649,618.318 L 848.3789,619.9473 L 845.521,614.4287 L 843.4292,620.1081 L 841.5744,619.1845 L 839.3655,614.4914 L 835.0155,617.7485 L 830.4225,622.0025 L 826.4951,616.365 L 824.6789,615.9 L 821.6778,623.5191 L 819.7527,616.3745 L 817.73,616.257 L 815.5792,622.1159 L 813.0966,616.392 L 811.0879,616.063 L 809.1613,621.1361 L 807.0721,618.0088 L 804.73,614.091 L 800.2869,619.0397 L 796.5622,623.3604 L 794.2086,616.8576 L 791.5523,616.509 L 789.2663,622.4514 L 786.9721,616.9356 L 784.8973,614.661 L 782.7586,619.6071 L 780.8402,623.6423 L 778.8907,616.6089 L 776.875,615.55 L 774.1821,622.6293 L 772.0774,617.0009 L 769.4834,616.3559 L 767.3249,621.9868 L 765.2201,617.5782 L 762.965,613.9324 L 759.0603,617.6843 L 754.7119,623.266 L 751.8913,616.4773 L 750.0614,615.3286 L 746.4819,624.3975 L 744.3294,615.5343 L 741.4136,618.7432 L 738.6388,619.2271 L 736.5018,614.8918 L 734.3347,617.891 L 731.3641,619.1502 L 729.2095,614.9509 L 723.0702,619.3657 L 719.2406,622.5097 L 715.9221,617.98 L 713.4481,614.1012 L 711.4945,618.958 L 709.5007,624.0854 L 707.3516,616.2486 L 704.9663,616.7562 L 702.6317,622.2497 L 700.3129,617.3331 L 698.2563,614.3339 L 696.4927,618.663 L 693.5026,619.2111 L 691.3535,614.8958 L 686.5846,619.055 L 681.4723,619.5221 L 679.4974,616.2264 L 677.1071,616.3697 L 674.3754,623.2277 L 672.2666,617.4706 L 669.6418,615.457 L 667.2961,621.2593 L 664.6472,617.4746 L 662.575,613.8157 L 660.6076,618.4012 L 655.0789,619.8715 L 651.5954,616.5276 L 649.049,614.5993 L 646.8958,619.001 L 644.7691,623.7685 L 642.8365,617.4925 L 640.8956,613.4747 L 638.3672,619.1961 L 636.1291,619.8168 L 633.9559,615.9766 L 631.7598,615.8723 L 629.4712,620.9526 L 627.5762,619.0153 L 625.0704,614.6445 L 621.9622,619.0149 L 617.7785,623.2273 L 614.0312,616.7694 L 611.586,615.3122 L 609.2806,620.8385 L 607.4258,619.5703 L 605.2467,615.7254 L 602.2673,618.3997 L 600.4609,622.8084 L 597.764,616.5378 L 595.5292,615.4037 L 593.4158,620.5916 L 590.2208,616.9342 L 587.8041,615.0333 L 583.8889,619.7019 L 580.0977,624.1572 L 577.5694,616.6169 L 575.4558,614.1971 L 573.4889,618.8508 L 571.509,623.7947 L 569.1623,616.5601 L 567.1033,614.5341 L 564.932,619.4142 L 561.9354,618.4555 L 559.8026,614.9592 L 558.0115,616.1969 L 554.8455,621.24 L 550.2282,619.133 L 546.8641,614.3802 L 544.7212,617.0151 L 542.9134,621.1587 L 540.8093,618.841 L 538.3168,614.584 L 535.2431,619.5287 L 532.82,619.5228 L 530.839,616.1794 L 528.6351,615.7039 L 526.6493,620.3896 L 524.4056,619.3956 L 521.9075,615.0905 L 519.7509,617.3167 L 515.4515,621.784 L 511.5376,613.6997 L 509.5702,608.9746 L 507.6623,605.0276 L 504.0357,619.9801 L 501.1412,611.2653 L 498.991,606.2609 L 497.0599,610.4372 L 494.2829,623.4261 L 488.7521,610.6093 L 486.159,605.9545 L 483.7448,613.4791 L 481.6147,624.3045 L 479.6563,611.2562 L 476.8278,604.3986 L 474.9101,614.6084 L 472.5447,614.7222 L 470.1935,609.2929 L 468.0888,605.1319 L 466.2625,614.0152 L 460.941,621.7465 L 456.1315,612.8435 L 454.3764,610.7092 L 452.41,608.3379 L 450.0391,604.3818 L 448.1042,610.1305 L 445.6955,616.9287 L 443.6055,623.406 L 441.1065,613.0623 L 438.5766,609.787 L 436.3737,606.247 L 434.1707,608.0363 L 431.7902,618.539 L 429.0389,612.9471 L 424.4777,607.8861 L 421.9063,606.1624 L 419.6752,617.3776 L 417.3221,613.9561 L 415.1742,609.6521 L 413.0457,604.916 L 410.5207,615.1357 L 408.1842,615.1882 L 406.0921,611.3208 L 404.1017,608.3346 L 401.2855,608.6315 L 398.6933,621.0558 L 395.7268,614.3021 L 392.2899,610.4095 L 389.7126,605.5717 L 387.8095,611.677 L 385.6954,623.7167 L 383.1835,610.9835 L 380.8915,606.2842 L 378.3631,611.3627 L 375.3482,623.4272 L 373.2011,610.9955 L 371.456,607.0919 L 369.2274,609.8115 L 365.7528,620.5512 L 362.9163,613.0178 L 360.3282,607.532 L 358.2206,609.4217 L 356.1588,621.2644 L 352.7005,609.3039 L 350.3042,607.6925 L 348.2024,620.0979 L 345.6822,611.3094 L 342.8979,605.2139 L 340.079,616.3413 L 336.1178,613.031 L 334.1626,608.4429 L 332.0689,607.6356 L 329.6139,622.2862 L 327.4697,611.2402 L 325.3517,606.1179 L 322.9552,614.5315 L 321.1636,615.2232 L 316.6804,609.3524 L 313.8323,606.3991 L 311.6042,618.0646 L 309.273,612.7823 L 306.2932,606.3812 L 303.9454,613.0361 L 301.084,613.8106 L 298.573,607.982 L 296.6762,606.4359 L 294.42,618.8256 L 291.5695,613.4645 L 288.4799,607.9711 L 286.4135,608.312 L 283.8071,624.0996 L 281.831,610.6268 L 279.5955,604.5386 L 277.3634,616.8671 L 275.0689,612.7695 L 273.1464,608.3926 L 271.0772,606.9945 L 269.0,616.4058 L 266.3777,614.064 L 263.3394,608.8481 L 261.5032,605.0265 L 259.3142,613.3238 L 257.0481,621.3104 L 254.7026,612.5824 L 252.0386,607.2348 L 249.6492,608.1895 L 247.945,615.7753 L 245.0875,612.1842 L 242.8595,605.9804 L 240.5253,612.3082 L 237.6196,615.116 L 234.3029,610.5083 L 231.9877,606.8067 L 229.7175,610.8912 L 226.8727,614.7003 L 225.1122,610.2709 L 222.5646,606.0949 L 220.5154,617.5957 L 218.2187,613.0043 L 215.8168,606.7189 L 213.7918,610.2618 L 211.1581,615.5646 L 208.1028,610.5681 L 205.9408,605.6971 L 204.0998,611.4444 L 202.2474,622.2986 L 199.7518,610.2312 L 196.5647,608.9706 L 194.2909,616.7745 L 192.3246,614.7995 L 190.2262,609.084 L 188.3708,606.1952 L 185.9213,619.6873 L 182.6602,611.0845 L 179.9098,607.9215 L 177.2029,623.7112 L 175.5065,612.2856 L 172.4474,607.784 L 169.6388,615.1139 L 167.5347,608.8568 L 165.3672,610.3088 L 163.0884,614.9184 L 160.6748,607.4755 L 158.3398,614.5669 L 155.2819,613.1688 L 152.8372,605.4313 L 150.5236,619.0419 L 148.4258,611.6548 L 146.2663,605.2034 L 144.1314,615.5937 L 142.1093,614.0553 L 140.0529,607.5415 L 136.8103,619.8682 L 134.7958,611.2803 L 133.0004,604.9372 L 130.105,615.193 L 128.0723,608.1293 L 125.5885,616.4463 L 123.705,613.047 L 121.6822,605.1826 L 119.3788,622.8273 L 116.8316,607.349 L 114.5546,615.147 L 112.6473,612.4942 L 110.2841,606.4104 L 108.4908,622.0346 L 106.4886,609.2813 L 103.4994,615.8348 L 101.8501,608.4382 L 99.81278,619.191 L 97.67613,608.5735 L 95.15372,613.6997 L 92.6433,622.0192 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#39a6fa'>-<path d='M 90.0,630.0 L 92.6433,623.6576 L 95.15372,619.133 L 97.67613,614.9764 L 99.81278,621.4519 L 101.8501,614.8276 L 103.4994,620.9614 L 106.4886,615.5368 L 108.4908,623.3232 L 110.2841,613.1404 L 112.6473,618.2736 L 114.5546,618.7553 L 116.8316,613.8966 L 119.3788,623.8513 L 121.6822,612.3046 L 123.705,618.6517 L 125.5885,619.5713 L 128.0723,614.5909 L 130.105,620.5315 L 133.0004,612.104 L 134.7958,617.2015 L 136.8103,621.7979 L 140.0529,614.1103 L 142.1093,619.5823 L 144.1314,618.9948 L 146.2663,612.2426 L 148.4258,617.487 L 150.5236,621.2469 L 152.8372,612.3998 L 155.2819,618.7363 L 158.3398,618.3363 L 160.6748,614.0469 L 163.0884,620.2908 L 165.3672,615.5252 L 167.5347,615.2006 L 169.6388,620.4516 L 172.4474,613.8613 L 175.5065,618.0318 L 177.2029,624.4216 L 179.9098,613.9532 L 182.6602,617.0268 L 185.9213,621.6644 L 188.3708,612.8486 L 190.2262,615.3877 L 192.3246,620.1993 L 194.2909,619.7442 L 196.5647,614.6405 L 199.7518,616.3198 L 202.2474,623.3798 L 204.0998,616.2279 L 205.9408,612.4895 L 208.1028,616.6078 L 211.1581,620.802 L 213.7918,615.4741 L 215.8168,613.373 L 218.2187,618.6528 L 220.5154,620.2733 L 222.5646,612.7385 L 225.1122,616.3471 L 226.8727,620.0819 L 229.7175,615.8618 L 231.9877,613.4317 L 234.3029,616.5608 L 237.6196,620.4396 L 240.5253,616.7934 L 242.8595,612.7221 L 245.0875,617.9749 L 247.945,619.0703 L 249.6492,614.0808 L 252.0386,613.7949 L 254.7026,618.2907 L 257.0481,622.7165 L 259.3142,617.464 L 261.5032,612.0694 L 263.3394,615.135 L 266.3777,619.5338 L 269.0,619.49 L 271.0772,613.3023 L 273.1464,614.8024 L 275.0689,618.4672 L 277.3634,619.7781 L 279.5955,611.6985 L 281.831,616.6523 L 283.8071,624.6451 L 286.4135,614.1581 L 288.4799,614.3962 L 291.5695,619.0174 L 294.42,621.0784 L 296.6762,612.9434 L 298.573,614.4196 L 301.084,619.3493 L 303.9454,617.2646 L 306.2932,613.0758 L 309.273,618.4366 L 311.6042,620.5683 L 313.8323,612.8836 L 316.6804,615.5715 L 321.1636,620.4833 L 322.9552,618.2499 L 325.3517,612.9022 L 327.4697,617.1949 L 329.6139,623.3659 L 332.0689,613.7118 L 334.1626,614.824 L 336.1178,618.655 L 340.079,619.4423 L 342.8979,612.1281 L 345.6822,617.2332 L 348.2024,621.9091 L 350.3042,613.7727 L 352.7005,615.5627 L 356.1588,622.6614 L 358.2206,614.8739 L 360.3282,614.0494 L 362.9163,618.6539 L 365.7528,622.1946 L 369.2274,615.1419 L 371.456,613.6975 L 373.2011,616.9987 L 375.3482,624.1583 L 378.3631,616.1633 L 380.8915,612.9704 L 383.1835,616.9156 L 385.6954,624.3548 L 387.8095,616.3588 L 389.7126,612.4216 L 392.2899,616.5148 L 395.7268,619.7664 L 398.6933,622.5327 L 401.2855,614.3525 L 404.1017,614.7364 L 406.0921,617.2339 L 408.1842,620.4677 L 410.5207,618.6353 L 413.0457,611.8575 L 415.1742,615.8111 L 417.3221,619.4313 L 419.6752,620.1107 L 421.9063,612.7382 L 424.4777,614.2835 L 429.0389,618.5602 L 431.7902,620.8837 L 434.1707,613.9747 L 436.3737,612.9672 L 438.5766,615.9741 L 441.1065,618.744 L 443.6055,624.1076 L 445.6955,619.816 L 448.1042,615.3341 L 450.0391,611.5056 L 452.41,614.6865 L 454.3764,616.6859 L 456.1315,618.4861 L 460.941,622.9892 L 466.2625,617.8932 L 468.0888,612.0625 L 470.1935,615.5314 L 472.5447,620.1125 L 474.9101,618.2838 L 476.8278,611.5993 L 479.6563,617.219 L 481.6147,624.7388 L 483.7448,617.5282 L 486.159,612.6907 L 488.7521,616.6071 L 494.2829,624.1306 L 497.0599,615.5368 L 498.991,612.9321 L 501.1412,617.1884 L 504.0357,621.8158 L 507.6623,612.014 L 509.5702,615.228 L 511.5376,619.2417 L 515.4515,623.5067 L 519.7509,621.3384 L 521.9075,620.1843 L 524.4056,622.199 L 526.6493,622.8178 L 528.6351,620.5256 L 530.839,620.6846 L 532.82,622.2606 L 535.2431,622.4054 L 538.3168,619.94 L 540.8093,621.947 L 542.9134,623.1781 L 544.7212,621.1838 L 546.8641,619.7325 L 550.2282,622.0882 L 554.8455,623.2368 L 558.0115,620.7937 L 559.8026,620.1245 L 561.9354,621.7782 L 564.932,622.3358 L 567.1033,619.9823 L 569.1623,620.871 L 571.509,624.4872 L 573.4889,622.0838 L 575.4558,619.8182 L 577.5694,620.8972 L 580.0977,624.6604 L 583.8889,622.4711 L 587.8041,620.2007 L 590.2208,620.9118 L 593.4158,622.9199 L 595.5292,620.4002 L 597.764,620.86 L 600.4609,623.9891 L 602.2673,621.8712 L 605.2467,620.4895 L 607.4258,622.3015 L 609.2806,623.0304 L 611.586,620.3805 L 614.0312,620.9326 L 617.7785,624.2035 L 621.9622,622.1684 L 625.0704,619.9721 L 627.5762,621.9223 L 629.4712,623.103 L 631.7598,620.6416 L 633.9559,620.6055 L 636.1291,622.3682 L 638.3672,622.2822 L 640.8956,619.4908 L 642.8365,621.341 L 644.7691,624.4602 L 646.8958,622.1505 L 649.049,620.01 L 651.5954,620.8564 L 655.0789,622.4043 L 660.6076,621.849 L 662.575,619.6352 L 664.6472,621.3002 L 667.2961,623.2532 L 669.6418,620.3991 L 672.2666,621.3129 L 674.3754,624.2279 L 677.1071,620.8728 L 679.4974,620.7061 L 681.4723,622.1403 L 686.5846,622.199 L 691.3535,620.0195 L 693.5026,622.1272 L 696.4927,621.9963 L 698.2563,619.8879 L 700.3129,621.2312 L 702.6317,623.7411 L 704.9663,621.0478 L 707.3516,620.7284 L 709.5007,624.6126 L 711.4945,622.1246 L 713.4481,619.7646 L 715.9221,621.5208 L 719.2406,623.8491 L 723.0702,622.3431 L 729.2095,620.1424 L 731.3641,622.1166 L 734.3347,621.6229 L 736.5018,620.1026 L 738.6388,622.1564 L 741.4136,622.0532 L 744.3294,620.2686 L 746.4819,624.7716 L 750.0614,620.3623 L 751.8913,620.8396 L 754.7119,624.2181 L 759.0603,621.489 L 762.965,619.6738 L 765.2201,621.3465 L 767.3249,623.5986 L 769.4834,620.8735 L 772.0774,621.073 L 774.1821,623.9235 L 776.875,620.4797 L 778.8907,620.9184 L 780.8402,624.4128 L 782.7586,622.4958 L 784.8973,620.0461 L 786.9721,621.069 L 789.2663,623.8338 L 791.5523,620.9275 L 794.2086,621.0019 L 796.5622,624.2761 L 800.2869,622.1914 L 804.73,619.7766 L 807.0721,621.5664 L 809.1613,623.192 L 811.0879,620.708 L 813.0966,620.7915 L 815.5792,623.678 L 817.73,620.8283 L 819.7527,620.8024 L 821.6778,624.3406 L 824.6789,620.6423 L 826.4951,620.7776 L 830.4225,623.6274 L 835.0155,621.5507 L 839.3655,619.936 L 841.5744,622.1268 L 843.4292,622.6982 L 845.521,619.8911 L 848.3789,622.4743 L 850.5649,621.8402 L 852.7443,620.3419 L 855.5727,623.4713 L 857.9012,620.2726 L 860.1512,621.8654 L 862.3732,622.3821 L 864.6559,620.0242 L 867.0381,622.3496 L 870.6411,622.109 L 874.6161,619.6796 L 878.5075,622.331 L 880.4874,622.2916 L 882.8039,620.2336 L 885.0559,623.5942 L 887.5112,620.056 L 889.7691,622.3143 L 892.0994,622.4277 L 894.3653,620.2091 L 896.4549,624.0427 L 898.227,621.488 L 900.8324,621.9536 L 902.8284,622.2333 L 905.5567,621.6965 L 907.7497,622.2213 L 910.3069,621.3505 L 913.7087,621.6451 L 918.5348,622.3682 L 922.5647,622.7464 L 926.0456,621.1113 L 929.6209,621.6017 L 930.0,630.0 L 930.0,630.0 L 929.6209,618.4599 L 926.0456,618.8763 L 922.5647,621.3778 L 918.5348,619.9812 L 913.7087,619.8292 L 910.3069,619.1068 L 907.7497,620.7247 L 905.5567,619.4036 L 902.8284,620.7948 L 900.8324,619.5644 L 898.227,619.7573 L 896.4549,623.3262 L 894.3653,617.9501 L 892.0994,621.0854 L 889.7691,619.8977 L 887.5112,617.7609 L 885.0559,622.7256 L 882.8039,618.0533 L 880.4874,620.9231 L 878.5075,619.886 L 874.6161,617.3058 L 870.6411,620.6781 L 867.0381,619.9178 L 864.6559,617.7215 L 862.3732,621.0584 L 860.1512,619.4816 L 857.9012,618.1361 L 855.5727,622.6103 L 852.7443,618.1233 L 850.5649,620.2966 L 848.3789,620.0151 L 845.521,617.6617 L 843.4292,621.5397 L 841.5744,619.6862 L 839.3655,617.6715 L 835.0155,619.9185 L 830.4225,622.8124 L 826.4951,618.5405 L 824.6789,618.6645 L 821.6778,623.833 L 819.7527,618.539 L 817.73,618.9139 L 815.5792,622.9002 L 813.0966,618.5565 L 811.0879,618.7782 L 809.1613,622.2359 L 807.0721,619.187 L 804.73,617.4498 L 800.2869,620.8086 L 796.5622,623.7455 L 794.2086,618.7396 L 791.5523,619.0984 L 789.2663,623.1391 L 786.9721,618.7848 L 784.8973,617.8538 L 782.7586,621.2137 L 780.8402,623.9271 L 778.8907,618.6386 L 776.875,618.4384 L 774.1821,623.2496 L 772.0774,618.8008 L 769.4834,619.0018 L 767.3249,622.8131 L 765.2201,619.0371 L 762.965,617.3732 L 759.0603,619.9127 L 754.7119,623.6821 L 751.8913,618.6309 L 750.0614,618.3155 L 746.4819,624.4434 L 744.3294,618.0402 L 741.4136,620.6398 L 738.6388,619.7289 L 736.5018,617.906 L 734.3347,620.052 L 731.3641,619.6519 L 729.2095,617.9468 L 723.0702,621.0489 L 719.2406,623.1664 L 715.9221,619.1819 L 713.4481,617.4728 L 711.4945,620.778 L 709.5007,624.2352 L 707.3516,618.5208 L 704.9663,619.2964 L 702.6317,622.994 L 700.3129,618.9142 L 698.2563,617.6507 L 696.4927,620.5851 L 693.5026,619.6855 L 691.3535,617.8174 L 686.5846,620.8185 L 681.4723,619.6833 L 679.4974,618.4821 L 677.1071,619.0339 L 674.3754,623.6711 L 672.2666,619.008 L 669.6418,618.4147 L 667.2961,622.3463 L 664.6472,618.9919 L 662.575,617.3094 L 660.6076,620.3907 L 655.0789,619.9232 L 651.5954,618.5974 L 649.049,617.8177 L 646.8958,620.8082 L 644.7691,624.0259 L 642.8365,618.966 L 640.8956,617.0687 L 638.3672,620.9486 L 636.1291,619.8904 L 633.9559,618.3891 L 631.7598,618.6987 L 629.4712,622.1381 L 627.5762,619.5265 L 625.0704,617.8411 L 621.9622,620.8185 L 617.7785,623.6598 L 614.0312,618.6134 L 611.586,618.3064 L 609.2806,622.0295 L 607.4258,619.8642 L 605.2467,618.2983 L 602.2673,620.4184 L 600.4609,623.383 L 597.764,618.6021 L 595.5292,618.3742 L 593.4158,621.8938 L 590.2208,618.667 L 587.8041,618.1496 L 583.8889,621.294 L 580.0977,624.318 L 577.5694,618.5955 L 575.4558,617.5505 L 573.4889,620.7164 L 571.509,624.0649 L 569.1623,618.6207 L 567.1033,617.7944 L 564.932,621.0865 L 561.9354,619.3967 L 559.8026,617.9552 L 558.0115,618.9175 L 554.8455,622.3343 L 550.2282,619.664 L 546.8641,617.5971 L 544.7212,619.4751 L 542.9134,622.2767 L 540.8093,619.5469 L 538.3168,617.7827 L 535.2431,621.1736 L 532.82,619.8332 L 530.839,618.4661 L 528.6351,618.6014 L 526.6493,621.7556 L 524.4056,619.777 L 521.9075,618.0063 L 519.7509,619.6855 L 515.4515,622.7015 L 511.5376,614.9764 L 509.5702,612.9263 L 507.6623,611.3784 L 504.0357,621.5029 L 501.1412,613.9896 L 498.991,611.8371 L 497.0599,615.0796 L 494.2829,623.7947 L 488.7521,613.5965 L 486.159,611.6931 L 483.7448,617.1223 L 481.6147,624.3341 L 479.6563,613.9623 L 476.8278,610.99 L 474.9101,617.8834 L 472.5447,615.4063 L 470.1935,613.2078 L 468.0888,611.4881 L 466.2625,617.4688 L 460.941,622.6895 L 456.1315,614.6945 L 454.3764,613.8055 L 452.41,612.8399 L 450.0391,610.9116 L 448.1042,614.8604 L 445.6955,619.4452 L 443.6055,623.7729 L 441.1065,614.6854 L 438.5766,613.3737 L 436.3737,611.8305 L 434.1707,613.4463 L 431.7902,620.5304 L 429.0389,614.7215 L 424.4777,612.5398 L 421.9063,612.1868 L 419.6752,619.7464 L 417.3221,615.096 L 415.1742,613.3519 L 413.0457,611.2197 L 410.5207,618.2447 L 408.1842,615.4935 L 406.0921,614.009 L 404.1017,612.8166 L 401.2855,613.8317 L 398.6933,622.2231 L 395.7268,615.2123 L 392.2899,613.617 L 389.7126,611.6635 L 387.8095,615.8927 L 385.6954,623.9741 L 383.1835,613.8066 L 380.8915,611.9859 L 378.3631,615.6951 L 375.3482,623.7557 L 373.2011,613.8602 L 371.456,612.294 L 369.2274,614.6343 L 365.7528,621.8807 L 362.9163,614.5483 L 360.3282,612.4807 L 358.2206,614.3849 L 356.1588,622.3496 L 352.7005,613.1878 L 350.3042,613.2027 L 348.2024,621.5678 L 345.6822,613.8518 L 342.8979,611.5264 L 340.079,619.0473 L 336.1178,614.6106 L 334.1626,612.8483 L 332.0689,613.1659 L 329.6139,623.0322 L 327.4697,613.9393 L 325.3517,611.8728 L 322.9552,617.8265 L 321.1636,615.4555 L 316.6804,613.1965 L 313.8323,612.3378 L 311.6042,620.1964 L 309.273,614.5443 L 306.2932,612.0409 L 303.9454,616.7996 L 301.084,614.9636 L 298.573,612.6791 L 296.6762,612.3746 L 294.42,620.7076 L 291.5695,614.9053 L 288.4799,612.6918 L 286.4135,613.6363 L 283.8071,624.1583 L 281.831,613.7052 L 279.5955,611.0717 L 277.3634,619.3963 L 275.0689,614.4349 L 273.1464,612.7961 L 271.0772,612.7345 L 269.0,619.0754 L 266.3777,615.1438 L 263.3394,612.9274 L 261.5032,611.3463 L 259.3142,616.998 L 257.0481,622.3828 L 254.7026,614.5537 L 252.0386,612.3695 L 249.6492,613.5393 L 247.945,618.6546 L 245.0875,614.3561 L 242.8595,611.7135 L 240.5253,616.3198 L 237.6196,615.4522 L 234.3029,613.5502 L 231.9877,612.0676 L 229.7175,615.3531 L 226.8727,615.3844 L 225.1122,613.5914 L 222.5646,612.1248 L 220.5154,619.886 L 218.2187,614.7332 L 215.8168,612.1653 L 213.7918,614.9261 L 211.1581,615.7381 L 208.1028,613.7121 L 205.9408,611.6088 L 204.0998,615.7203 L 202.2474,623.0209 L 199.7518,613.5827 L 196.5647,614.0596 L 194.2909,619.3274 L 192.3246,615.4034 L 190.2262,613.0992 L 188.3708,612.154 L 185.9213,621.263 L 182.6602,613.9528 L 179.9098,613.3296 L 177.2029,623.8866 L 175.5065,614.4392 L 172.4474,613.2377 L 169.6388,615.5354 L 167.5347,613.0105 L 165.3672,614.9366 L 163.0884,615.4676 L 160.6748,612.4771 L 158.3398,617.809 L 155.2819,614.6427 L 152.8372,611.5541 L 150.5236,620.8236 L 148.4258,614.0476 L 146.2663,611.4156 L 144.1314,618.4949 L 142.1093,615.1004 L 140.0529,612.4596 L 136.8103,621.3691 L 134.7958,614.0629 L 133.0004,611.2442 L 130.105,615.5616 L 128.0723,612.7443 L 125.5885,619.0539 L 123.705,614.7922 L 121.6822,611.3911 L 119.3788,623.2726 L 116.8316,612.4745 L 114.5546,618.1667 L 112.6473,614.5038 L 110.2841,612.2105 L 108.4908,622.715 L 106.4886,613.3128 L 103.4994,615.9226 L 101.8501,612.8749 L 99.81278,620.8305 L 97.67613,613.0959 L 95.15372,615.1642 L 92.6433,622.346 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#549a4a'>-<path d='M 90.0,630.0 L 92.6433,625.2336 L 95.15372,620.7091 L 97.67613,616.5524 L 99.81278,623.0279 L 101.8501,616.4036 L 103.4994,622.5374 L 106.4886,617.1129 L 108.4908,624.8993 L 110.2841,614.7164 L 112.6473,619.8496 L 114.5546,620.3313 L 116.8316,615.4727 L 119.3788,625.4273 L 121.6822,613.8806 L 123.705,620.2277 L 125.5885,621.1474 L 128.0723,616.167 L 130.105,622.1075 L 133.0004,613.68 L 134.7958,618.7775 L 136.8103,623.3739 L 140.0529,615.6864 L 142.1093,621.1583 L 144.1314,620.5709 L 146.2663,613.8186 L 148.4258,619.063 L 150.5236,622.8229 L 152.8372,613.9758 L 155.2819,620.3123 L 158.3398,619.9123 L 160.6748,615.6229 L 163.0884,621.8668 L 165.3672,617.1012 L 167.5347,616.7767 L 169.6388,622.0276 L 172.4474,615.4373 L 175.5065,619.6078 L 177.2029,625.9976 L 179.9098,615.5292 L 182.6602,618.6028 L 185.9213,623.2405 L 188.3708,614.4247 L 190.2262,616.9637 L 192.3246,621.7753 L 194.2909,621.3202 L 196.5647,616.2166 L 199.7518,617.8958 L 202.2474,624.9558 L 204.0998,617.8039 L 205.9408,614.0655 L 208.1028,618.1838 L 211.1581,622.3781 L 213.7918,617.0501 L 215.8168,614.949 L 218.2187,620.2288 L 220.5154,621.8493 L 222.5646,614.3145 L 225.1122,617.9231 L 226.8727,621.6579 L 229.7175,617.4378 L 231.9877,615.0077 L 234.3029,618.1368 L 237.6196,622.0156 L 240.5253,618.3695 L 242.8595,614.2981 L 245.0875,619.5509 L 247.945,620.6463 L 249.6492,615.6568 L 252.0386,615.3709 L 254.7026,619.8667 L 257.0481,624.2925 L 259.3142,619.04 L 261.5032,613.6454 L 263.3394,616.711 L 266.3777,621.1098 L 269.0,621.0661 L 271.0772,614.8783 L 273.1464,616.3785 L 275.0689,620.0432 L 277.3634,621.3541 L 279.5955,613.2746 L 281.831,618.2283 L 283.8071,626.2211 L 286.4135,615.7341 L 288.4799,615.9722 L 291.5695,620.5935 L 294.42,622.6545 L 296.6762,614.5195 L 298.573,615.9956 L 301.084,620.9253 L 303.9454,618.8406 L 306.2932,614.6518 L 309.273,620.0126 L 311.6042,622.1443 L 313.8323,614.4597 L 316.6804,617.1475 L 321.1636,622.0594 L 322.9552,619.8259 L 325.3517,614.4783 L 327.4697,618.7709 L 329.6139,624.9419 L 332.0689,615.2878 L 334.1626,616.4 L 336.1178,620.231 L 340.079,621.0183 L 342.8979,613.7041 L 345.6822,618.8092 L 348.2024,623.4851 L 350.3042,615.3487 L 352.7005,617.1388 L 356.1588,624.2374 L 358.2206,616.4499 L 360.3282,615.6255 L 362.9163,620.2299 L 365.7528,623.7707 L 369.2274,616.718 L 371.456,615.2736 L 373.2011,618.5748 L 375.3482,625.7343 L 378.3631,617.7393 L 380.8915,614.5465 L 383.1835,618.4916 L 385.6954,625.9309 L 387.8095,617.9348 L 389.7126,613.9977 L 392.2899,618.0909 L 395.7268,621.3425 L 398.6933,624.1087 L 401.2855,615.9285 L 404.1017,616.3125 L 406.0921,618.81 L 408.1842,622.0437 L 410.5207,620.2113 L 413.0457,613.4335 L 415.1742,617.3871 L 417.3221,621.0073 L 419.6752,621.6867 L 421.9063,614.3142 L 424.4777,615.8596 L 429.0389,620.1362 L 431.7902,622.4597 L 434.1707,615.5507 L 436.3737,614.5432 L 438.5766,617.5501 L 441.1065,620.32 L 443.6055,625.6836 L 445.6955,621.392 L 448.1042,616.9101 L 450.0391,613.0817 L 452.41,616.2625 L 454.3764,618.2619 L 456.1315,620.0622 L 460.941,624.5652 L 466.2625,619.4692 L 468.0888,613.6385 L 470.1935,617.1074 L 472.5447,621.6885 L 474.9101,619.8598 L 476.8278,613.1754 L 479.6563,618.795 L 481.6147,626.3148 L 483.7448,619.1042 L 486.159,614.2668 L 488.7521,618.1831 L 494.2829,625.7066 L 497.0599,617.1129 L 498.991,614.5082 L 501.1412,618.7644 L 504.0357,623.3918 L 507.6623,613.59 L 509.5702,616.804 L 511.5376,620.8177 L 515.4515,625.0827 L 519.7509,622.9145 L 521.9075,621.7603 L 524.4056,623.775 L 526.6493,624.3939 L 528.6351,622.1017 L 530.839,622.2606 L 532.82,623.8367 L 535.2431,623.9814 L 538.3168,621.516 L 540.8093,623.5231 L 542.9134,624.7541 L 544.7212,622.7599 L 546.8641,621.3085 L 550.2282,623.6642 L 554.8455,624.8128 L 558.0115,622.3697 L 559.8026,621.7005 L 561.9354,623.3542 L 564.932,623.9118 L 567.1033,621.5583 L 569.1623,622.447 L 571.509,626.0632 L 573.4889,623.6598 L 575.4558,621.3942 L 577.5694,622.4732 L 580.0977,626.2364 L 583.8889,624.0471 L 587.8041,621.7768 L 590.2208,622.4878 L 593.4158,624.496 L 595.5292,621.9762 L 597.764,622.436 L 600.4609,625.5651 L 602.2673,623.4472 L 605.2467,622.0656 L 607.4258,623.8775 L 609.2806,624.6064 L 611.586,621.9565 L 614.0312,622.5086 L 617.7785,625.7795 L 621.9622,623.7444 L 625.0704,621.5481 L 627.5762,623.4983 L 629.4712,624.679 L 631.7598,622.2176 L 633.9559,622.1815 L 636.1291,623.9442 L 638.3672,623.8582 L 640.8956,621.0668 L 642.8365,622.917 L 644.7691,626.0362 L 646.8958,623.7265 L 649.049,621.586 L 651.5954,622.4324 L 655.0789,623.9803 L 660.6076,623.425 L 662.575,621.2112 L 664.6472,622.8762 L 667.2961,624.8292 L 669.6418,621.9751 L 672.2666,622.8889 L 674.3754,625.804 L 677.1071,622.4488 L 679.4974,622.2822 L 681.4723,623.7163 L 686.5846,623.775 L 691.3535,621.5955 L 693.5026,623.7032 L 696.4927,623.5723 L 698.2563,621.4639 L 700.3129,622.8073 L 702.6317,625.3172 L 704.9663,622.6238 L 707.3516,622.3044 L 709.5007,626.1887 L 711.4945,623.7007 L 713.4481,621.3406 L 715.9221,623.0968 L 719.2406,625.4251 L 723.0702,623.9191 L 729.2095,621.7184 L 731.3641,623.6926 L 734.3347,623.1989 L 736.5018,621.6787 L 738.6388,623.7324 L 741.4136,623.6292 L 744.3294,621.8446 L 746.4819,626.3477 L 750.0614,621.9383 L 751.8913,622.4156 L 754.7119,625.7941 L 759.0603,623.0651 L 762.965,621.2498 L 765.2201,622.9225 L 767.3249,625.1746 L 769.4834,622.4495 L 772.0774,622.649 L 774.1821,625.4995 L 776.875,622.0557 L 778.8907,622.4944 L 780.8402,625.9888 L 782.7586,624.0719 L 784.8973,621.6221 L 786.9721,622.645 L 789.2663,625.4098 L 791.5523,622.5035 L 794.2086,622.5779 L 796.5622,625.8521 L 800.2869,623.7674 L 804.73,621.3527 L 807.0721,623.1424 L 809.1613,624.768 L 811.0879,622.284 L 813.0966,622.3675 L 815.5792,625.2541 L 817.73,622.4043 L 819.7527,622.3784 L 821.6778,625.9166 L 824.6789,622.2183 L 826.4951,622.3536 L 830.4225,625.2034 L 835.0155,623.1267 L 839.3655,621.512 L 841.5744,623.7028 L 843.4292,624.2742 L 845.521,621.4672 L 848.3789,624.0504 L 850.5649,623.4162 L 852.7443,621.9179 L 855.5727,625.0473 L 857.9012,621.8486 L 860.1512,623.4414 L 862.3732,623.9581 L 864.6559,621.6003 L 867.0381,623.9256 L 870.6411,623.685 L 874.6161,621.2557 L 878.5075,623.907 L 880.4874,623.8677 L 882.8039,621.8096 L 885.0559,625.1702 L 887.5112,621.632 L 889.7691,623.8903 L 892.0994,624.0037 L 894.3653,621.7851 L 896.4549,625.6187 L 898.227,623.064 L 900.8324,623.5296 L 902.8284,623.8093 L 905.5567,623.2726 L 907.7497,623.7973 L 910.3069,622.9265 L 913.7087,623.2211 L 918.5348,623.9442 L 922.5647,624.3224 L 926.0456,622.6873 L 929.6209,623.1777 L 930.0,630.0 L 930.0,630.0 L 929.6209,621.6017 L 926.0456,621.1113 L 922.5647,622.7464 L 918.5348,622.3682 L 913.7087,621.6451 L 910.3069,621.3505 L 907.7497,622.2213 L 905.5567,621.6965 L 902.8284,622.2333 L 900.8324,621.9536 L 898.227,621.488 L 896.4549,624.0427 L 894.3653,620.2091 L 892.0994,622.4277 L 889.7691,622.3143 L 887.5112,620.056 L 885.0559,623.5942 L 882.8039,620.2336 L 880.4874,622.2916 L 878.5075,622.331 L 874.6161,619.6796 L 870.6411,622.109 L 867.0381,622.3496 L 864.6559,620.0242 L 862.3732,622.3821 L 860.1512,621.8654 L 857.9012,620.2726 L 855.5727,623.4713 L 852.7443,620.3419 L 850.5649,621.8402 L 848.3789,622.4743 L 845.521,619.8911 L 843.4292,622.6982 L 841.5744,622.1268 L 839.3655,619.936 L 835.0155,621.5507 L 830.4225,623.6274 L 826.4951,620.7776 L 824.6789,620.6423 L 821.6778,624.3406 L 819.7527,620.8024 L 817.73,620.8283 L 815.5792,623.678 L 813.0966,620.7915 L 811.0879,620.708 L 809.1613,623.192 L 807.0721,621.5664 L 804.73,619.7766 L 800.2869,622.1914 L 796.5622,624.2761 L 794.2086,621.0019 L 791.5523,620.9275 L 789.2663,623.8338 L 786.9721,621.069 L 784.8973,620.0461 L 782.7586,622.4958 L 780.8402,624.4128 L 778.8907,620.9184 L 776.875,620.4797 L 774.1821,623.9235 L 772.0774,621.073 L 769.4834,620.8735 L 767.3249,623.5986 L 765.2201,621.3465 L 762.965,619.6738 L 759.0603,621.489 L 754.7119,624.2181 L 751.8913,620.8396 L 750.0614,620.3623 L 746.4819,624.7716 L 744.3294,620.2686 L 741.4136,622.0532 L 738.6388,622.1564 L 736.5018,620.1026 L 734.3347,621.6229 L 731.3641,622.1166 L 729.2095,620.1424 L 723.0702,622.3431 L 719.2406,623.8491 L 715.9221,621.5208 L 713.4481,619.7646 L 711.4945,622.1246 L 709.5007,624.6126 L 707.3516,620.7284 L 704.9663,621.0478 L 702.6317,623.7411 L 700.3129,621.2312 L 698.2563,619.8879 L 696.4927,621.9963 L 693.5026,622.1272 L 691.3535,620.0195 L 686.5846,622.199 L 681.4723,622.1403 L 679.4974,620.7061 L 677.1071,620.8728 L 674.3754,624.2279 L 672.2666,621.3129 L 669.6418,620.3991 L 667.2961,623.2532 L 664.6472,621.3002 L 662.575,619.6352 L 660.6076,621.849 L 655.0789,622.4043 L 651.5954,620.8564 L 649.049,620.01 L 646.8958,622.1505 L 644.7691,624.4602 L 642.8365,621.341 L 640.8956,619.4908 L 638.3672,622.2822 L 636.1291,622.3682 L 633.9559,620.6055 L 631.7598,620.6416 L 629.4712,623.103 L 627.5762,621.9223 L 625.0704,619.9721 L 621.9622,622.1684 L 617.7785,624.2035 L 614.0312,620.9326 L 611.586,620.3805 L 609.2806,623.0304 L 607.4258,622.3015 L 605.2467,620.4895 L 602.2673,621.8712 L 600.4609,623.9891 L 597.764,620.86 L 595.5292,620.4002 L 593.4158,622.9199 L 590.2208,620.9118 L 587.8041,620.2007 L 583.8889,622.4711 L 580.0977,624.6604 L 577.5694,620.8972 L 575.4558,619.8182 L 573.4889,622.0838 L 571.509,624.4872 L 569.1623,620.871 L 567.1033,619.9823 L 564.932,622.3358 L 561.9354,621.7782 L 559.8026,620.1245 L 558.0115,620.7937 L 554.8455,623.2368 L 550.2282,622.0882 L 546.8641,619.7325 L 544.7212,621.1838 L 542.9134,623.1781 L 540.8093,621.947 L 538.3168,619.94 L 535.2431,622.4054 L 532.82,622.2606 L 530.839,620.6846 L 528.6351,620.5256 L 526.6493,622.8178 L 524.4056,622.199 L 521.9075,620.1843 L 519.7509,621.3384 L 515.4515,623.5067 L 511.5376,619.2417 L 509.5702,615.228 L 507.6623,612.014 L 504.0357,621.8158 L 501.1412,617.1884 L 498.991,612.9321 L 497.0599,615.5368 L 494.2829,624.1306 L 488.7521,616.6071 L 486.159,612.6907 L 483.7448,617.5282 L 481.6147,624.7388 L 479.6563,617.219 L 476.8278,611.5993 L 474.9101,618.2838 L 472.5447,620.1125 L 470.1935,615.5314 L 468.0888,612.0625 L 466.2625,617.8932 L 460.941,622.9892 L 456.1315,618.4861 L 454.3764,616.6859 L 452.41,614.6865 L 450.0391,611.5056 L 448.1042,615.3341 L 445.6955,619.816 L 443.6055,624.1076 L 441.1065,618.744 L 438.5766,615.9741 L 436.3737,612.9672 L 434.1707,613.9747 L 431.7902,620.8837 L 429.0389,618.5602 L 424.4777,614.2835 L 421.9063,612.7382 L 419.6752,620.1107 L 417.3221,619.4313 L 415.1742,615.8111 L 413.0457,611.8575 L 410.5207,618.6353 L 408.1842,620.4677 L 406.0921,617.2339 L 404.1017,614.7364 L 401.2855,614.3525 L 398.6933,622.5327 L 395.7268,619.7664 L 392.2899,616.5148 L 389.7126,612.4216 L 387.8095,616.3588 L 385.6954,624.3548 L 383.1835,616.9156 L 380.8915,612.9704 L 378.3631,616.1633 L 375.3482,624.1583 L 373.2011,616.9987 L 371.456,613.6975 L 369.2274,615.1419 L 365.7528,622.1946 L 362.9163,618.6539 L 360.3282,614.0494 L 358.2206,614.8739 L 356.1588,622.6614 L 352.7005,615.5627 L 350.3042,613.7727 L 348.2024,621.9091 L 345.6822,617.2332 L 342.8979,612.1281 L 340.079,619.4423 L 336.1178,618.655 L 334.1626,614.824 L 332.0689,613.7118 L 329.6139,623.3659 L 327.4697,617.1949 L 325.3517,612.9022 L 322.9552,618.2499 L 321.1636,620.4833 L 316.6804,615.5715 L 313.8323,612.8836 L 311.6042,620.5683 L 309.273,618.4366 L 306.2932,613.0758 L 303.9454,617.2646 L 301.084,619.3493 L 298.573,614.4196 L 296.6762,612.9434 L 294.42,621.0784 L 291.5695,619.0174 L 288.4799,614.3962 L 286.4135,614.1581 L 283.8071,624.6451 L 281.831,616.6523 L 279.5955,611.6985 L 277.3634,619.7781 L 275.0689,618.4672 L 273.1464,614.8024 L 271.0772,613.3023 L 269.0,619.49 L 266.3777,619.5338 L 263.3394,615.135 L 261.5032,612.0694 L 259.3142,617.464 L 257.0481,622.7165 L 254.7026,618.2907 L 252.0386,613.7949 L 249.6492,614.0808 L 247.945,619.0703 L 245.0875,617.9749 L 242.8595,612.7221 L 240.5253,616.7934 L 237.6196,620.4396 L 234.3029,616.5608 L 231.9877,613.4317 L 229.7175,615.8618 L 226.8727,620.0819 L 225.1122,616.3471 L 222.5646,612.7385 L 220.5154,620.2733 L 218.2187,618.6528 L 215.8168,613.373 L 213.7918,615.4741 L 211.1581,620.802 L 208.1028,616.6078 L 205.9408,612.4895 L 204.0998,616.2279 L 202.2474,623.3798 L 199.7518,616.3198 L 196.5647,614.6405 L 194.2909,619.7442 L 192.3246,620.1993 L 190.2262,615.3877 L 188.3708,612.8486 L 185.9213,621.6644 L 182.6602,617.0268 L 179.9098,613.9532 L 177.2029,624.4216 L 175.5065,618.0318 L 172.4474,613.8613 L 169.6388,620.4516 L 167.5347,615.2006 L 165.3672,615.5252 L 163.0884,620.2908 L 160.6748,614.0469 L 158.3398,618.3363 L 155.2819,618.7363 L 152.8372,612.3998 L 150.5236,621.2469 L 148.4258,617.487 L 146.2663,612.2426 L 144.1314,618.9948 L 142.1093,619.5823 L 140.0529,614.1103 L 136.8103,621.7979 L 134.7958,617.2015 L 133.0004,612.104 L 130.105,620.5315 L 128.0723,614.5909 L 125.5885,619.5713 L 123.705,618.6517 L 121.6822,612.3046 L 119.3788,623.8513 L 116.8316,613.8966 L 114.5546,618.7553 L 112.6473,618.2736 L 110.2841,613.1404 L 108.4908,623.3232 L 106.4886,615.5368 L 103.4994,620.9614 L 101.8501,614.8276 L 99.81278,621.4519 L 97.67613,614.9764 L 95.15372,619.133 L 92.6433,623.6576 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#bf3725'>-<path d='M 90.0,630.0 L 92.6433,630.0 L 95.15372,630.0 L 97.67613,630.0 L 99.81278,630.0 L 101.8501,630.0 L 103.4994,630.0 L 106.4886,630.0 L 108.4908,630.0 L 110.2841,630.0 L 112.6473,630.0 L 114.5546,630.0 L 116.8316,630.0 L 119.3788,630.0 L 121.6822,630.0 L 123.705,630.0 L 125.5885,630.0 L 128.0723,630.0 L 130.105,630.0 L 133.0004,630.0 L 134.7958,630.0 L 136.8103,630.0 L 140.0529,630.0 L 142.1093,630.0 L 144.1314,630.0 L 146.2663,630.0 L 148.4258,630.0 L 150.5236,630.0 L 152.8372,630.0 L 155.2819,630.0 L 158.3398,630.0 L 160.6748,630.0 L 163.0884,630.0 L 165.3672,630.0 L 167.5347,630.0 L 169.6388,630.0 L 172.4474,630.0 L 175.5065,630.0 L 177.2029,630.0 L 179.9098,630.0 L 182.6602,630.0 L 185.9213,630.0 L 188.3708,630.0 L 190.2262,630.0 L 192.3246,630.0 L 194.2909,630.0 L 196.5647,630.0 L 199.7518,630.0 L 202.2474,630.0 L 204.0998,630.0 L 205.9408,630.0 L 208.1028,630.0 L 211.1581,630.0 L 213.7918,630.0 L 215.8168,630.0 L 218.2187,630.0 L 220.5154,630.0 L 222.5646,630.0 L 225.1122,630.0 L 226.8727,630.0 L 229.7175,630.0 L 231.9877,630.0 L 234.3029,630.0 L 237.6196,630.0 L 240.5253,630.0 L 242.8595,630.0 L 245.0875,630.0 L 247.945,630.0 L 249.6492,630.0 L 252.0386,630.0 L 254.7026,630.0 L 257.0481,630.0 L 259.3142,630.0 L 261.5032,630.0 L 263.3394,630.0 L 266.3777,630.0 L 269.0,630.0 L 271.0772,630.0 L 273.1464,630.0 L 275.0689,630.0 L 277.3634,630.0 L 279.5955,630.0 L 281.831,630.0 L 283.8071,630.0 L 286.4135,630.0 L 288.4799,630.0 L 291.5695,630.0 L 294.42,630.0 L 296.6762,630.0 L 298.573,630.0 L 301.084,630.0 L 303.9454,630.0 L 306.2932,630.0 L 309.273,630.0 L 311.6042,630.0 L 313.8323,630.0 L 316.6804,630.0 L 321.1636,630.0 L 322.9552,630.0 L 325.3517,630.0 L 327.4697,630.0 L 329.6139,630.0 L 332.0689,630.0 L 334.1626,630.0 L 336.1178,630.0 L 340.079,630.0 L 342.8979,630.0 L 345.6822,630.0 L 348.2024,630.0 L 350.3042,630.0 L 352.7005,630.0 L 356.1588,630.0 L 358.2206,630.0 L 360.3282,630.0 L 362.9163,630.0 L 365.7528,630.0 L 369.2274,630.0 L 371.456,630.0 L 373.2011,630.0 L 375.3482,630.0 L 378.3631,630.0 L 380.8915,630.0 L 383.1835,630.0 L 385.6954,630.0 L 387.8095,630.0 L 389.7126,630.0 L 392.2899,630.0 L 395.7268,630.0 L 398.6933,630.0 L 401.2855,630.0 L 404.1017,630.0 L 406.0921,630.0 L 408.1842,630.0 L 410.5207,630.0 L 413.0457,630.0 L 415.1742,630.0 L 417.3221,630.0 L 419.6752,630.0 L 421.9063,630.0 L 424.4777,630.0 L 429.0389,630.0 L 431.7902,630.0 L 434.1707,630.0 L 436.3737,630.0 L 438.5766,630.0 L 441.1065,630.0 L 443.6055,630.0 L 445.6955,630.0 L 448.1042,630.0 L 450.0391,630.0 L 452.41,630.0 L 454.3764,630.0 L 456.1315,630.0 L 460.941,630.0 L 466.2625,630.0 L 468.0888,630.0 L 470.1935,630.0 L 472.5447,630.0 L 474.9101,630.0 L 476.8278,630.0 L 479.6563,630.0 L 481.6147,630.0 L 483.7448,630.0 L 486.159,630.0 L 488.7521,630.0 L 494.2829,630.0 L 497.0599,630.0 L 498.991,630.0 L 501.1412,630.0 L 504.0357,630.0 L 507.6623,630.0 L 509.5702,630.0 L 511.5376,630.0 L 515.4515,630.0 L 519.7509,630.0 L 521.9075,630.0 L 524.4056,630.0 L 526.6493,630.0 L 528.6351,630.0 L 530.839,630.0 L 532.82,630.0 L 535.2431,630.0 L 538.3168,630.0 L 540.8093,630.0 L 542.9134,630.0 L 544.7212,630.0 L 546.8641,630.0 L 550.2282,630.0 L 554.8455,630.0 L 558.0115,630.0 L 559.8026,630.0 L 561.9354,630.0 L 564.932,630.0 L 567.1033,630.0 L 569.1623,630.0 L 571.509,630.0 L 573.4889,630.0 L 575.4558,630.0 L 577.5694,630.0 L 580.0977,630.0 L 583.8889,630.0 L 587.8041,630.0 L 590.2208,630.0 L 593.4158,630.0 L 595.5292,630.0 L 597.764,630.0 L 600.4609,630.0 L 602.2673,630.0 L 605.2467,630.0 L 607.4258,630.0 L 609.2806,630.0 L 611.586,630.0 L 614.0312,630.0 L 617.7785,630.0 L 621.9622,630.0 L 625.0704,630.0 L 627.5762,630.0 L 629.4712,630.0 L 631.7598,630.0 L 633.9559,630.0 L 636.1291,630.0 L 638.3672,630.0 L 640.8956,630.0 L 642.8365,630.0 L 644.7691,630.0 L 646.8958,630.0 L 649.049,630.0 L 651.5954,630.0 L 655.0789,630.0 L 660.6076,630.0 L 662.575,630.0 L 664.6472,630.0 L 667.2961,630.0 L 669.6418,630.0 L 672.2666,630.0 L 674.3754,630.0 L 677.1071,630.0 L 679.4974,630.0 L 681.4723,630.0 L 686.5846,630.0 L 691.3535,630.0 L 693.5026,630.0 L 696.4927,630.0 L 698.2563,630.0 L 700.3129,630.0 L 702.6317,630.0 L 704.9663,630.0 L 707.3516,630.0 L 709.5007,630.0 L 711.4945,630.0 L 713.4481,630.0 L 715.9221,630.0 L 719.2406,630.0 L 723.0702,630.0 L 729.2095,630.0 L 731.3641,630.0 L 734.3347,630.0 L 736.5018,630.0 L 738.6388,630.0 L 741.4136,630.0 L 744.3294,630.0 L 746.4819,630.0 L 750.0614,630.0 L 751.8913,630.0 L 754.7119,630.0 L 759.0603,630.0 L 762.965,630.0 L 765.2201,630.0 L 767.3249,630.0 L 769.4834,630.0 L 772.0774,630.0 L 774.1821,630.0 L 776.875,630.0 L 778.8907,630.0 L 780.8402,630.0 L 782.7586,630.0 L 784.8973,630.0 L 786.9721,630.0 L 789.2663,630.0 L 791.5523,630.0 L 794.2086,630.0 L 796.5622,630.0 L 800.2869,630.0 L 804.73,630.0 L 807.0721,630.0 L 809.1613,630.0 L 811.0879,630.0 L 813.0966,630.0 L 815.5792,630.0 L 817.73,630.0 L 819.7527,630.0 L 821.6778,630.0 L 824.6789,630.0 L 826.4951,630.0 L 830.4225,630.0 L 835.0155,630.0 L 839.3655,630.0 L 841.5744,630.0 L 843.4292,630.0 L 845.521,630.0 L 848.3789,630.0 L 850.5649,630.0 L 852.7443,630.0 L 855.5727,630.0 L 857.9012,630.0 L 860.1512,630.0 L 862.3732,630.0 L 864.6559,630.0 L 867.0381,630.0 L 870.6411,630.0 L 874.6161,630.0 L 878.5075,630.0 L 880.4874,630.0 L 882.8039,630.0 L 885.0559,630.0 L 887.5112,630.0 L 889.7691,630.0 L 892.0994,630.0 L 894.3653,630.0 L 896.4549,630.0 L 898.227,630.0 L 900.8324,630.0 L 902.8284,630.0 L 905.5567,630.0 L 907.7497,630.0 L 910.3069,630.0 L 913.7087,630.0 L 918.5348,630.0 L 922.5647,630.0 L 926.0456,630.0 L 929.6209,630.0 L 930.0,630.0 L 930.0,630.0 L 929.6209,623.1777 L 926.0456,622.6873 L 922.5647,624.3224 L 918.5348,623.9442 L 913.7087,623.2211 L 910.3069,622.9265 L 907.7497,623.7973 L 905.5567,623.2726 L 902.8284,623.8093 L 900.8324,623.5296 L 898.227,623.064 L 896.4549,625.6187 L 894.3653,621.7851 L 892.0994,624.0037 L 889.7691,623.8903 L 887.5112,621.632 L 885.0559,625.1702 L 882.8039,621.8096 L 880.4874,623.8677 L 878.5075,623.907 L 874.6161,621.2557 L 870.6411,623.685 L 867.0381,623.9256 L 864.6559,621.6003 L 862.3732,623.9581 L 860.1512,623.4414 L 857.9012,621.8486 L 855.5727,625.0473 L 852.7443,621.9179 L 850.5649,623.4162 L 848.3789,624.0504 L 845.521,621.4672 L 843.4292,624.2742 L 841.5744,623.7028 L 839.3655,621.512 L 835.0155,623.1267 L 830.4225,625.2034 L 826.4951,622.3536 L 824.6789,622.2183 L 821.6778,625.9166 L 819.7527,622.3784 L 817.73,622.4043 L 815.5792,625.2541 L 813.0966,622.3675 L 811.0879,622.284 L 809.1613,624.768 L 807.0721,623.1424 L 804.73,621.3527 L 800.2869,623.7674 L 796.5622,625.8521 L 794.2086,622.5779 L 791.5523,622.5035 L 789.2663,625.4098 L 786.9721,622.645 L 784.8973,621.6221 L 782.7586,624.0719 L 780.8402,625.9888 L 778.8907,622.4944 L 776.875,622.0557 L 774.1821,625.4995 L 772.0774,622.649 L 769.4834,622.4495 L 767.3249,625.1746 L 765.2201,622.9225 L 762.965,621.2498 L 759.0603,623.0651 L 754.7119,625.7941 L 751.8913,622.4156 L 750.0614,621.9383 L 746.4819,626.3477 L 744.3294,621.8446 L 741.4136,623.6292 L 738.6388,623.7324 L 736.5018,621.6787 L 734.3347,623.1989 L 731.3641,623.6926 L 729.2095,621.7184 L 723.0702,623.9191 L 719.2406,625.4251 L 715.9221,623.0968 L 713.4481,621.3406 L 711.4945,623.7007 L 709.5007,626.1887 L 707.3516,622.3044 L 704.9663,622.6238 L 702.6317,625.3172 L 700.3129,622.8073 L 698.2563,621.4639 L 696.4927,623.5723 L 693.5026,623.7032 L 691.3535,621.5955 L 686.5846,623.775 L 681.4723,623.7163 L 679.4974,622.2822 L 677.1071,622.4488 L 674.3754,625.804 L 672.2666,622.8889 L 669.6418,621.9751 L 667.2961,624.8292 L 664.6472,622.8762 L 662.575,621.2112 L 660.6076,623.425 L 655.0789,623.9803 L 651.5954,622.4324 L 649.049,621.586 L 646.8958,623.7265 L 644.7691,626.0362 L 642.8365,622.917 L 640.8956,621.0668 L 638.3672,623.8582 L 636.1291,623.9442 L 633.9559,622.1815 L 631.7598,622.2176 L 629.4712,624.679 L 627.5762,623.4983 L 625.0704,621.5481 L 621.9622,623.7444 L 617.7785,625.7795 L 614.0312,622.5086 L 611.586,621.9565 L 609.2806,624.6064 L 607.4258,623.8775 L 605.2467,622.0656 L 602.2673,623.4472 L 600.4609,625.5651 L 597.764,622.436 L 595.5292,621.9762 L 593.4158,624.496 L 590.2208,622.4878 L 587.8041,621.7768 L 583.8889,624.0471 L 580.0977,626.2364 L 577.5694,622.4732 L 575.4558,621.3942 L 573.4889,623.6598 L 571.509,626.0632 L 569.1623,622.447 L 567.1033,621.5583 L 564.932,623.9118 L 561.9354,623.3542 L 559.8026,621.7005 L 558.0115,622.3697 L 554.8455,624.8128 L 550.2282,623.6642 L 546.8641,621.3085 L 544.7212,622.7599 L 542.9134,624.7541 L 540.8093,623.5231 L 538.3168,621.516 L 535.2431,623.9814 L 532.82,623.8367 L 530.839,622.2606 L 528.6351,622.1017 L 526.6493,624.3939 L 524.4056,623.775 L 521.9075,621.7603 L 519.7509,622.9145 L 515.4515,625.0827 L 511.5376,620.8177 L 509.5702,616.804 L 507.6623,613.59 L 504.0357,623.3918 L 501.1412,618.7644 L 498.991,614.5082 L 497.0599,617.1129 L 494.2829,625.7066 L 488.7521,618.1831 L 486.159,614.2668 L 483.7448,619.1042 L 481.6147,626.3148 L 479.6563,618.795 L 476.8278,613.1754 L 474.9101,619.8598 L 472.5447,621.6885 L 470.1935,617.1074 L 468.0888,613.6385 L 466.2625,619.4692 L 460.941,624.5652 L 456.1315,620.0622 L 454.3764,618.2619 L 452.41,616.2625 L 450.0391,613.0817 L 448.1042,616.9101 L 445.6955,621.392 L 443.6055,625.6836 L 441.1065,620.32 L 438.5766,617.5501 L 436.3737,614.5432 L 434.1707,615.5507 L 431.7902,622.4597 L 429.0389,620.1362 L 424.4777,615.8596 L 421.9063,614.3142 L 419.6752,621.6867 L 417.3221,621.0073 L 415.1742,617.3871 L 413.0457,613.4335 L 410.5207,620.2113 L 408.1842,622.0437 L 406.0921,618.81 L 404.1017,616.3125 L 401.2855,615.9285 L 398.6933,624.1087 L 395.7268,621.3425 L 392.2899,618.0909 L 389.7126,613.9977 L 387.8095,617.9348 L 385.6954,625.9309 L 383.1835,618.4916 L 380.8915,614.5465 L 378.3631,617.7393 L 375.3482,625.7343 L 373.2011,618.5748 L 371.456,615.2736 L 369.2274,616.718 L 365.7528,623.7707 L 362.9163,620.2299 L 360.3282,615.6255 L 358.2206,616.4499 L 356.1588,624.2374 L 352.7005,617.1388 L 350.3042,615.3487 L 348.2024,623.4851 L 345.6822,618.8092 L 342.8979,613.7041 L 340.079,621.0183 L 336.1178,620.231 L 334.1626,616.4 L 332.0689,615.2878 L 329.6139,624.9419 L 327.4697,618.7709 L 325.3517,614.4783 L 322.9552,619.8259 L 321.1636,622.0594 L 316.6804,617.1475 L 313.8323,614.4597 L 311.6042,622.1443 L 309.273,620.0126 L 306.2932,614.6518 L 303.9454,618.8406 L 301.084,620.9253 L 298.573,615.9956 L 296.6762,614.5195 L 294.42,622.6545 L 291.5695,620.5935 L 288.4799,615.9722 L 286.4135,615.7341 L 283.8071,626.2211 L 281.831,618.2283 L 279.5955,613.2746 L 277.3634,621.3541 L 275.0689,620.0432 L 273.1464,616.3785 L 271.0772,614.8783 L 269.0,621.0661 L 266.3777,621.1098 L 263.3394,616.711 L 261.5032,613.6454 L 259.3142,619.04 L 257.0481,624.2925 L 254.7026,619.8667 L 252.0386,615.3709 L 249.6492,615.6568 L 247.945,620.6463 L 245.0875,619.5509 L 242.8595,614.2981 L 240.5253,618.3695 L 237.6196,622.0156 L 234.3029,618.1368 L 231.9877,615.0077 L 229.7175,617.4378 L 226.8727,621.6579 L 225.1122,617.9231 L 222.5646,614.3145 L 220.5154,621.8493 L 218.2187,620.2288 L 215.8168,614.949 L 213.7918,617.0501 L 211.1581,622.3781 L 208.1028,618.1838 L 205.9408,614.0655 L 204.0998,617.8039 L 202.2474,624.9558 L 199.7518,617.8958 L 196.5647,616.2166 L 194.2909,621.3202 L 192.3246,621.7753 L 190.2262,616.9637 L 188.3708,614.4247 L 185.9213,623.2405 L 182.6602,618.6028 L 179.9098,615.5292 L 177.2029,625.9976 L 175.5065,619.6078 L 172.4474,615.4373 L 169.6388,622.0276 L 167.5347,616.7767 L 165.3672,617.1012 L 163.0884,621.8668 L 160.6748,615.6229 L 158.3398,619.9123 L 155.2819,620.3123 L 152.8372,613.9758 L 150.5236,622.8229 L 148.4258,619.063 L 146.2663,613.8186 L 144.1314,620.5709 L 142.1093,621.1583 L 140.0529,615.6864 L 136.8103,623.3739 L 134.7958,618.7775 L 133.0004,613.68 L 130.105,622.1075 L 128.0723,616.167 L 125.5885,621.1474 L 123.705,620.2277 L 121.6822,613.8806 L 119.3788,625.4273 L 116.8316,615.4727 L 114.5546,620.3313 L 112.6473,619.8496 L 110.2841,614.7164 L 108.4908,624.8993 L 106.4886,617.1129 L 103.4994,622.5374 L 101.8501,616.4036 L 99.81278,623.0279 L 97.67613,616.5524 L 95.15372,620.7091 L 92.6433,625.2336 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5b0991'>-<rect x='990.0' y='93.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='110.25' font-size='15.0' text-anchor='start'>ARR_WORDS</text>-<g fill='#3b8166'>-<rect x='990.0' y='127.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='144.0' font-size='15.0' text-anchor='start'>ghc-prim:GHC.Types.:</text>-<g fill='#e6564e'>-<rect x='990.0' y='160.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='177.75' font-size='15.0' text-anchor='start'>dfinity-radix-tree-0.3.1-Ch2JdNQi35N1NDZGT2tyvZ:DFINITY.RadixTree.Types.RadixNode</text>-<g fill='#fba63a'>-<rect x='990.0' y='194.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='211.5' font-size='15.0' text-anchor='start'>base:GHC.Base.Just</text>-<g fill='#bd9a53'>-<rect x='990.0' y='228.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='245.25' font-size='15.0' text-anchor='start'>bytestring-0.10.8.2:Data.ByteString.Short.Internal.SBS</text>-<g fill='#5d01a8'>-<rect x='990.0' y='262.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='279.0' font-size='15.0' text-anchor='start'>bytestring-0.10.8.2:Data.ByteString.Internal.PS</text>-<g fill='#7e1593'>-<rect x='990.0' y='295.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='312.75' font-size='15.0' text-anchor='start'>containers-0.5.11.0:Data.Map.Internal.Bin</text>-<g fill='#5a5ffc'>-<rect x='990.0' y='329.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='346.5' font-size='15.0' text-anchor='start'>THUNK_2_0</text>-<g fill='#a23338'>-<rect x='990.0' y='363.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='380.25' font-size='15.0' text-anchor='start'>base:GHC.ForeignPtr.PlainPtr</text>-<g fill='#c808c2'>-<rect x='990.0' y='397.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='414.0' font-size='15.0' text-anchor='start'>psqueues-0.2.7.0-61W4WPtGYUOI5ei0j8xe3i:Data.IntPSQ.Internal.Bin</text>-<g fill='#188b19'>-<rect x='990.0' y='430.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='447.75' font-size='15.0' text-anchor='start'>psqueues-0.2.7.0-61W4WPtGYUOI5ei0j8xe3i:Data.HashPSQ.Internal.B</text>-<g fill='#5e65cd'>-<rect x='990.0' y='464.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='481.5' font-size='15.0' text-anchor='start'>THUNK_1_0</text>-<g fill='#53cb86'>-<rect x='990.0' y='498.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='515.25' font-size='15.0' text-anchor='start'>THUNK</text>-<g fill='#39a6fa'>-<rect x='990.0' y='532.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='549.0' font-size='15.0' text-anchor='start'>dfinity-radix-tree-0.3.1-Ch2JdNQi35N1NDZGT2tyvZ:DFINITY.RadixTree.Types.RadixPrefix</text>-<g fill='#549a4a'>-<rect x='990.0' y='565.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='582.75' font-size='15.0' text-anchor='start'>STACK</text>-<g fill='#bf3725'>-<rect x='990.0' y='599.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='616.5' font-size='15.0' text-anchor='start'>(trace elements)</text>-</g>-</g>-</svg>
− benchmark/dfinity-radix-tree-benchmarks-lmdb.svg
@@ -1,168 +0,0 @@-<?xml version='1.0' encoding='UTF-8' ?>-<svg xmlns='http://www.w3.org/2000/svg' version='1.0' width='1280.0' height='720.0'>-<defs>-</defs>-<g fill='#ffffff'>-<rect x='0.0' y='0.0' width='1280.0' height='720.0' />-</g>-<g fill='#000000' stroke='#000000' stroke-width='1.0'>-<text stroke='none' x='640.0' y='45.0' font-size='25.0' text-anchor='middle'>dfinity-radix-tree-benchmarks (Tue Sep 25 12:31 2018)</text>-<text stroke='none' transform='translate(30.0,360.0) rotate(-90.0)' font-size='20.0' text-anchor='middle'>bytes</text>-<text stroke='none' x='510.0' y='690.0' font-size='20.0' text-anchor='middle'>seconds</text>-<line x1='60.0' x2='930.0' y1='630.0' y2='630.0' />-<text stroke='none' x='80.0' y='620.0' font-size='15.0' text-anchor='end'>0</text>-<line x1='60.0' x2='930.0' y1='593.3023' y2='593.3023' />-<text stroke='none' x='80.0' y='583.3023' font-size='15.0' text-anchor='end'>1M</text>-<line x1='60.0' x2='930.0' y1='556.6045' y2='556.6045' />-<text stroke='none' x='80.0' y='546.6045' font-size='15.0' text-anchor='end'>2M</text>-<line x1='60.0' x2='930.0' y1='519.9068' y2='519.9068' />-<text stroke='none' x='80.0' y='509.9068' font-size='15.0' text-anchor='end'>3M</text>-<line x1='60.0' x2='930.0' y1='483.209' y2='483.209' />-<text stroke='none' x='80.0' y='473.209' font-size='15.0' text-anchor='end'>4M</text>-<line x1='60.0' x2='930.0' y1='446.5113' y2='446.5113' />-<text stroke='none' x='80.0' y='436.5113' font-size='15.0' text-anchor='end'>5M</text>-<line x1='60.0' x2='930.0' y1='409.8135' y2='409.8135' />-<text stroke='none' x='80.0' y='399.8135' font-size='15.0' text-anchor='end'>6M</text>-<line x1='60.0' x2='930.0' y1='373.1158' y2='373.1158' />-<text stroke='none' x='80.0' y='363.1158' font-size='15.0' text-anchor='end'>7M</text>-<line x1='60.0' x2='930.0' y1='336.418' y2='336.418' />-<text stroke='none' x='80.0' y='326.418' font-size='15.0' text-anchor='end'>8M</text>-<line x1='60.0' x2='930.0' y1='299.7203' y2='299.7203' />-<text stroke='none' x='80.0' y='289.7203' font-size='15.0' text-anchor='end'>9M</text>-<line x1='60.0' x2='930.0' y1='263.0225' y2='263.0225' />-<text stroke='none' x='80.0' y='253.0225' font-size='15.0' text-anchor='end'>10M</text>-<line x1='60.0' x2='930.0' y1='226.3248' y2='226.3248' />-<text stroke='none' x='80.0' y='216.3248' font-size='15.0' text-anchor='end'>11M</text>-<line x1='60.0' x2='930.0' y1='189.627' y2='189.627' />-<text stroke='none' x='80.0' y='179.627' font-size='15.0' text-anchor='end'>12M</text>-<line x1='60.0' x2='930.0' y1='152.9293' y2='152.9293' />-<text stroke='none' x='80.0' y='142.9293' font-size='15.0' text-anchor='end'>13M</text>-<line x1='60.0' x2='930.0' y1='116.2315' y2='116.2315' />-<line x1='90.0' x2='90.0' y1='660.0' y2='90.0' />-<text stroke='none' x='100.0' y='650.0' font-size='15.0' text-anchor='start'>0</text>-<line x1='155.9935' x2='155.9935' y1='660.0' y2='90.0' />-<text stroke='none' x='165.9935' y='650.0' font-size='15.0' text-anchor='start'>2</text>-<line x1='221.987' x2='221.987' y1='660.0' y2='90.0' />-<text stroke='none' x='231.987' y='650.0' font-size='15.0' text-anchor='start'>4</text>-<line x1='287.9805' x2='287.9805' y1='660.0' y2='90.0' />-<text stroke='none' x='297.9805' y='650.0' font-size='15.0' text-anchor='start'>6</text>-<line x1='353.974' x2='353.974' y1='660.0' y2='90.0' />-<text stroke='none' x='363.974' y='650.0' font-size='15.0' text-anchor='start'>8</text>-<line x1='419.9675' x2='419.9675' y1='660.0' y2='90.0' />-<text stroke='none' x='429.9675' y='650.0' font-size='15.0' text-anchor='start'>10</text>-<line x1='485.961' x2='485.961' y1='660.0' y2='90.0' />-<text stroke='none' x='495.961' y='650.0' font-size='15.0' text-anchor='start'>12</text>-<line x1='551.9545' x2='551.9545' y1='660.0' y2='90.0' />-<text stroke='none' x='561.9545' y='650.0' font-size='15.0' text-anchor='start'>14</text>-<line x1='617.9481' x2='617.9481' y1='660.0' y2='90.0' />-<text stroke='none' x='627.9481' y='650.0' font-size='15.0' text-anchor='start'>16</text>-<line x1='683.9416' x2='683.9416' y1='660.0' y2='90.0' />-<text stroke='none' x='693.9416' y='650.0' font-size='15.0' text-anchor='start'>18</text>-<line x1='749.9351' x2='749.9351' y1='660.0' y2='90.0' />-<text stroke='none' x='759.9351' y='650.0' font-size='15.0' text-anchor='start'>20</text>-<line x1='815.9286' x2='815.9286' y1='660.0' y2='90.0' />-<text stroke='none' x='825.9286' y='650.0' font-size='15.0' text-anchor='start'>22</text>-<line x1='881.9221' x2='881.9221' y1='660.0' y2='90.0' />-<g fill-opacity='0.7'>-<g fill='#ffffff'>-<rect x='90.0' y='90.0' width='840.0' height='540.0' />-</g>-<g fill='#5b0991'>-<path d='M 90.0,630.0 L 93.56117,578.3263 L 96.41691,554.1487 L 100.7409,549.7174 L 103.9973,534.6108 L 107.9292,530.2018 L 110.7122,547.3637 L 113.4086,524.632 L 116.4332,608.9425 L 119.5335,525.0697 L 122.3811,599.8221 L 125.4581,526.8969 L 129.9579,538.9244 L 132.991,538.6006 L 137.4734,523.1042 L 141.7456,571.6292 L 145.1565,526.3224 L 148.2812,585.9665 L 151.4082,524.9314 L 153.8301,543.4415 L 157.3496,515.5888 L 159.8819,535.6516 L 163.0601,546.4486 L 166.1133,532.2507 L 169.1257,575.4354 L 173.8415,536.1721 L 177.071,544.5935 L 179.9506,529.4725 L 182.1241,541.5966 L 184.9026,542.7375 L 188.0364,529.8381 L 191.4821,586.3725 L 194.6185,521.9836 L 197.5494,542.0185 L 199.9554,551.0482 L 202.8453,527.4301 L 206.3025,584.5391 L 208.5323,525.4425 L 211.6729,533.8522 L 214.4873,576.4903 L 218.0916,526.7023 L 220.8342,610.3459 L 223.3724,535.9704 L 226.7251,529.7937 L 230.5112,580.6327 L 234.0911,521.5423 L 236.5762,534.4344 L 239.9428,594.0186 L 243.3033,520.7628 L 245.7697,528.2395 L 248.7306,610.5223 L 252.4034,514.5724 L 255.7633,536.6923 L 258.8556,567.7747 L 261.7909,521.0928 L 264.9514,538.5683 L 267.6354,568.2541 L 271.2531,521.2881 L 275.372,536.0083 L 278.7308,579.577 L 282.3091,519.3589 L 285.6905,537.8966 L 288.3857,572.8041 L 293.0874,526.5027 L 297.1539,600.0543 L 299.8463,532.1051 L 303.4716,531.3385 L 307.5545,576.5772 L 311.8588,524.1449 L 315.6465,607.1602 L 319.5375,515.6942 L 322.8874,533.8628 L 326.9125,559.0656 L 329.785,520.4311 L 332.7395,537.3529 L 335.8684,557.5093 L 340.4819,532.8305 L 343.6741,611.1529 L 346.4711,555.6744 L 349.8648,518.8014 L 353.6779,537.2108 L 357.0373,566.3793 L 360.4296,521.3427 L 363.4311,537.1802 L 366.6408,571.1148 L 370.1894,521.3256 L 372.9526,535.3976 L 376.1096,587.2973 L 379.8633,512.7695 L 382.9257,531.3306 L 386.3066,588.9834 L 389.3993,523.6925 L 392.2687,527.7337 L 395.6921,606.4333 L 398.41,541.6712 L 401.3108,523.8733 L 404.1413,539.0213 L 407.078,573.1308 L 411.4007,515.7708 L 414.2939,529.8756 L 417.6851,601.9553 L 421.1016,531.9683 L 424.0545,524.5844 L 426.5142,536.3644 L 430.1642,565.0946 L 433.3223,518.9098 L 436.0414,531.7833 L 439.1801,598.0157 L 441.6458,537.8185 L 445.4988,528.8117 L 449.6977,576.1676 L 452.4033,512.1251 L 455.3571,532.8423 L 458.5584,586.6241 L 461.4745,512.0884 L 464.2553,529.6596 L 467.6613,604.8227 L 471.5425,528.5601 L 474.3093,525.1827 L 478.7215,597.108 L 481.419,539.1425 L 483.9104,521.8641 L 486.2208,533.5874 L 489.1773,584.7294 L 492.5825,516.3215 L 495.8148,534.9546 L 499.4737,560.7889 L 502.1703,519.5791 L 504.9696,534.1047 L 508.8778,562.2078 L 511.2514,503.9905 L 514.2421,554.5257 L 517.3338,568.3842 L 520.3763,494.8331 L 523.4049,556.6738 L 526.225,577.9861 L 529.2262,513.11 L 532.188,540.6219 L 534.8844,597.7054 L 539.5842,507.4351 L 543.58,612.0683 L 546.1484,542.94 L 549.6258,529.7015 L 553.2639,585.6923 L 557.7907,509.6895 L 560.4139,562.4647 L 562.9989,571.8731 L 565.514,513.608 L 569.0618,554.9158 L 572.1633,567.967 L 576.0319,518.8352 L 579.2472,611.967 L 582.2137,536.6034 L 584.8649,520.9193 L 588.2945,600.0541 L 591.3033,527.6708 L 593.976,529.351 L 597.1275,594.6427 L 600.4484,511.5091 L 604.2266,564.4561 L 607.9704,540.5605 L 611.4156,534.7262 L 615.2255,575.2273 L 618.7163,511.4842 L 621.4151,544.1575 L 625.9024,546.877 L 628.1984,499.1643 L 630.7107,547.938 L 633.7799,582.7095 L 637.934,498.2028 L 641.135,560.2068 L 644.0307,584.1108 L 648.0427,518.1106 L 651.7455,554.6416 L 654.8251,580.2493 L 658.1095,508.4336 L 661.0766,552.6767 L 664.3993,573.2741 L 667.6346,502.6659 L 670.3676,551.7434 L 674.1383,561.3532 L 677.4062,512.2525 L 680.3694,570.7026 L 683.8974,548.6015 L 686.7041,517.4706 L 690.0451,607.9811 L 692.8351,538.108 L 695.2176,519.2958 L 698.3422,575.9099 L 701.6787,548.5331 L 705.0621,506.2669 L 707.6247,562.4412 L 710.665,567.6608 L 713.2368,515.508 L 716.4565,555.1818 L 719.7726,565.1439 L 722.6103,514.3918 L 727.0604,565.0306 L 730.1509,583.9 L 733.6457,525.7617 L 736.2556,533.8043 L 739.6113,588.9358 L 742.3556,526.5849 L 745.2577,542.1958 L 748.5497,576.2906 L 752.0964,504.7591 L 757.1347,572.635 L 760.1255,560.0617 L 763.8369,518.6614 L 767.4715,592.6587 L 770.7028,517.8232 L 774.4631,572.4019 L 777.4632,564.7916 L 780.0684,506.6234 L 783.3133,574.1651 L 786.1083,557.7116 L 789.3441,518.8193 L 792.9731,591.0135 L 796.4929,512.0132 L 800.5749,607.8578 L 804.9764,511.4067 L 808.6477,611.4239 L 811.8924,537.1327 L 815.0348,543.8046 L 818.7569,563.2031 L 822.6119,537.4568 L 825.4594,592.4793 L 828.4501,525.8447 L 832.227,576.5866 L 835.7178,546.4017 L 838.3943,527.1259 L 841.0206,610.7269 L 844.5857,516.3113 L 847.9327,608.4311 L 850.9386,534.6728 L 853.8989,560.6219 L 857.1536,548.4837 L 859.8448,538.457 L 863.1617,597.8463 L 866.3971,544.2796 L 869.2519,538.3155 L 872.7499,574.6933 L 875.9817,517.0502 L 879.5555,604.1348 L 882.3518,540.9355 L 885.2014,543.1317 L 888.9416,558.1053 L 892.3162,549.8286 L 895.1255,582.9831 L 897.9262,523.8663 L 900.4222,577.9764 L 903.6589,535.8483 L 907.2527,594.555 L 911.2496,530.3095 L 914.1828,609.8391 L 917.3226,548.888 L 920.9951,594.3069 L 924.0882,548.7118 L 928.0172,580.7886 L 930.0,630.0 L 930.0,630.0 L 928.0172,524.0242 L 924.0882,457.8286 L 920.9951,556.8118 L 917.3226,457.156 L 914.1828,526.3186 L 911.2496,409.2601 L 907.2527,562.5343 L 903.6589,419.3582 L 900.4222,313.8301 L 897.9262,386.1238 L 895.1255,533.891 L 892.3162,325.372 L 888.9416,471.6466 L 885.2014,323.6648 L 882.3518,425.0877 L 879.5555,552.3253 L 875.9817,363.8045 L 872.7499,511.9753 L 869.2519,312.0375 L 866.3971,432.9454 L 863.1617,568.6467 L 859.8448,303.8017 L 857.1536,442.9205 L 853.8989,266.6515 L 850.9386,405.1065 L 847.9327,549.3959 L 844.5857,354.6944 L 841.0206,547.3029 L 838.3943,298.2177 L 835.7178,434.2809 L 832.227,230.3278 L 828.4501,378.9933 L 825.4594,556.3062 L 822.6119,272.7436 L 818.7569,476.2778 L 815.0348,261.9342 L 811.8924,407.3806 L 808.6477,549.1481 L 804.9764,333.9458 L 800.5749,555.8917 L 796.4929,336.1039 L 792.9731,552.433 L 789.3441,288.5788 L 786.1083,459.8901 L 783.3133,204.9279 L 780.0684,320.3127 L 777.4632,479.5574 L 774.4631,198.9075 L 770.7028,348.562 L 767.4715,555.572 L 763.8369,279.3844 L 760.1255,465.8084 L 757.1347,198.8018 L 752.0964,312.0311 L 748.5497,510.6774 L 745.2577,236.3571 L 742.3556,371.7274 L 739.6113,545.5268 L 736.2556,248.2172 L 733.6457,368.744 L 730.1509,530.311 L 727.0604,199.7089 L 722.6103,337.2694 L 719.7726,479.2727 L 716.4565,209.1423 L 713.2368,338.9569 L 710.665,485.2858 L 707.6247,199.5093 L 705.0621,284.9924 L 701.6787,431.129 L 698.3422,182.4493 L 695.2176,267.5047 L 692.8351,402.7006 L 690.0451,557.8334 L 686.7041,263.2392 L 683.8974,431.0383 L 680.3694,176.3483 L 677.4062,271.2188 L 674.1383,466.1578 L 670.3676,202.9243 L 667.6346,301.1163 L 664.3993,501.148 L 661.0766,201.6651 L 658.1095,315.6195 L 654.8251,519.0366 L 651.7455,196.624 L 648.0427,343.7866 L 644.0307,530.0621 L 641.135,181.604 L 637.934,286.5467 L 633.7799,525.9851 L 630.7107,201.4088 L 628.1984,289.422 L 625.9024,425.3646 L 621.4151,200.7409 L 618.7163,321.6297 L 615.2255,505.2403 L 611.4156,219.5087 L 607.9704,405.4556 L 604.2266,170.6393 L 600.4484,322.7171 L 597.1275,559.8175 L 593.976,227.01 L 591.3033,367.6546 L 588.2945,570.1645 L 584.8649,242.4733 L 582.2137,392.444 L 579.2472,556.805 L 576.0319,246.1554 L 572.1633,482.9877 L 569.0618,176.6372 L 565.514,327.4779 L 562.9989,494.2521 L 560.4139,163.0056 L 557.7907,256.121 L 553.2639,533.1623 L 549.6258,221.7622 L 546.1484,410.1582 L 543.58,559.8964 L 539.5842,259.1452 L 534.8844,569.3366 L 532.188,197.663 L 529.2262,325.2898 L 526.225,511.6354 L 523.4049,173.7404 L 520.3763,271.3438 L 517.3338,483.7656 L 514.2421,174.8839 L 511.2514,297.1435 L 508.8778,465.0284 L 504.9696,129.8068 L 502.1703,275.013 L 499.4737,456.8119 L 495.8148,115.8393 L 492.5825,293.1091 L 489.1773,527.8854 L 486.2208,133.2828 L 483.9104,255.4041 L 481.419,393.9257 L 478.7215,565.5077 L 474.3093,223.1964 L 471.5425,363.9234 L 467.6613,558.5357 L 464.2553,181.3058 L 461.4745,316.2962 L 458.5584,534.9205 L 455.3571,152.8359 L 452.4033,311.458 L 449.6977,504.2588 L 445.4988,187.8623 L 441.6458,391.6916 L 439.1801,568.5457 L 436.0414,167.2162 L 433.3223,286.899 L 430.1642,472.8837 L 426.5142,118.7082 L 424.0545,236.0039 L 421.1016,376.6596 L 417.6851,561.7542 L 414.2939,180.6487 L 411.4007,304.0559 L 407.078,495.8037 L 404.1413,90.0 L 401.3108,241.6574 L 398.41,405.5733 L 395.6921,553.5354 L 392.2687,208.6561 L 389.3993,353.4942 L 386.3066,542.1444 L 382.9257,173.7733 L 379.8633,324.1492 L 376.1096,537.2795 L 372.9526,133.1199 L 370.1894,267.7245 L 366.6408,491.0157 L 363.4311,124.2484 L 360.4296,274.5365 L 357.0373,478.4016 L 353.6779,123.0735 L 349.8648,295.7164 L 346.4711,447.1806 L 343.6741,542.1471 L 340.4819,166.5712 L 335.8684,454.2709 L 332.7395,126.2996 L 329.785,288.1344 L 326.9125,457.6363 L 322.8874,170.2042 L 319.5375,336.6746 L 315.6465,549.6942 L 311.8588,252.7275 L 307.5545,508.9021 L 303.4716,192.663 L 299.8463,384.6612 L 297.1539,562.322 L 293.0874,241.4968 L 288.3857,498.5528 L 285.6905,135.7207 L 282.3091,306.6882 L 278.7308,516.5188 L 275.372,154.7298 L 271.2531,291.2813 L 267.6354,486.8964 L 264.9514,133.6201 L 261.7909,296.5663 L 258.8556,486.0386 L 255.7633,163.1239 L 252.4034,341.4838 L 248.7306,542.2974 L 245.7697,235.5676 L 243.3033,360.6403 L 239.9428,559.4182 L 236.5762,187.7833 L 234.0911,304.6034 L 230.5112,522.5044 L 226.7251,234.9479 L 223.3724,402.7687 L 220.8342,538.5207 L 218.0916,265.4499 L 214.4873,512.8693 L 211.6729,202.3559 L 208.5323,377.1625 L 206.3025,533.7078 L 202.8453,269.0022 L 199.9554,446.6657 L 197.5494,142.1422 L 194.6185,315.1181 L 191.4821,540.375 L 188.0364,256.7739 L 184.9026,426.6249 L 182.1241,158.8591 L 179.9506,260.1355 L 177.071,432.6107 L 173.8415,209.1684 L 169.1257,512.5784 L 166.1133,245.2197 L 163.0601,440.6599 L 159.8819,223.9647 L 157.3496,363.6586 L 153.8301,173.34 L 151.4082,317.4441 L 148.2812,541.6033 L 145.1565,316.3629 L 141.7456,506.5799 L 137.4734,354.2928 L 132.991,244.5521 L 129.9579,432.5077 L 125.4581,354.5259 L 122.3811,546.8588 L 119.5335,371.6904 L 116.4332,529.489 L 113.4086,410.0346 L 110.7122,267.1597 L 107.9292,427.1032 L 103.9973,382.102 L 100.7409,328.8859 L 96.41691,362.9314 L 93.56117,499.0434 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#3b8166'>-<path d='M 90.0,630.0 L 93.56117,580.6911 L 96.41691,556.0617 L 100.7409,551.884 L 103.9973,539.225 L 107.9292,535.7426 L 110.7122,549.3595 L 113.4086,530.621 L 116.4332,609.1046 L 119.5335,530.8218 L 122.3811,600.6306 L 125.4581,532.3347 L 129.9579,543.9033 L 132.991,541.692 L 137.4734,529.0263 L 141.7456,574.3806 L 145.1565,531.7002 L 148.2812,587.7588 L 151.4082,530.4792 L 153.8301,545.446 L 157.3496,522.0235 L 159.8819,539.2018 L 163.0601,550.8162 L 166.1133,536.3788 L 169.1257,577.9139 L 173.8415,539.5638 L 177.071,549.1135 L 179.9506,533.9388 L 182.1241,543.8786 L 184.9026,547.3702 L 188.0364,534.2268 L 191.4821,588.1085 L 194.6185,527.9832 L 197.5494,544.149 L 199.9554,555.0793 L 202.8453,532.2451 L 206.3025,586.3482 L 208.5323,531.2519 L 211.6729,537.4509 L 214.4873,578.9062 L 218.0916,531.6389 L 220.8342,610.4859 L 223.3724,541.0241 L 226.7251,534.2142 L 230.5112,582.7042 L 234.0911,527.4037 L 236.5762,537.8481 L 239.9428,595.2217 L 243.3033,526.899 L 245.7697,532.8467 L 248.7306,610.6518 L 252.4034,521.1542 L 255.7633,539.7908 L 258.8556,570.7182 L 261.7909,527.0863 L 264.9514,541.4219 L 267.6354,571.2619 L 271.2531,527.1759 L 275.372,539.1534 L 278.7308,581.7102 L 282.3091,525.5268 L 285.6905,540.6877 L 288.3857,575.3785 L 293.0874,531.3723 L 297.1539,600.869 L 299.8463,537.5261 L 303.4716,535.419 L 307.5545,578.9552 L 311.8588,529.5923 L 315.6465,607.4966 L 319.5375,522.2029 L 322.8874,537.4122 L 326.9125,562.5648 L 329.785,526.3286 L 332.7395,540.2074 L 335.8684,561.116 L 340.4819,536.4566 L 343.6741,611.2577 L 346.4711,559.4238 L 349.8648,525.0653 L 353.6779,540.0433 L 357.0373,569.4311 L 360.4296,527.071 L 363.4311,540.0805 L 366.6408,573.9253 L 370.1894,527.1941 L 372.9526,538.6247 L 376.1096,588.88 L 379.8633,519.4315 L 382.9257,535.2799 L 386.3066,590.4639 L 389.3993,529.6481 L 392.2687,532.384 L 395.6921,606.7759 L 398.41,546.3832 L 401.3108,529.1464 L 404.1413,541.6107 L 407.078,575.7255 L 411.4007,522.1641 L 414.2939,534.1032 L 417.6851,602.5789 L 421.1016,537.2994 L 424.0545,529.7174 L 426.5142,539.3721 L 430.1642,568.2124 L 433.3223,525.2362 L 436.0414,535.6833 L 439.1801,598.9026 L 441.6458,542.7868 L 445.4988,533.196 L 449.6977,578.5509 L 452.4033,518.8047 L 455.3571,536.4965 L 458.5584,588.3319 L 461.4745,518.8155 L 464.2553,533.9047 L 467.6613,605.2869 L 471.5425,534.1097 L 474.3093,530.195 L 478.7215,598.0689 L 481.419,543.999 L 483.9104,527.4568 L 486.2208,537.1368 L 489.1773,586.5419 L 492.5825,522.7959 L 495.8148,538.2821 L 499.4737,564.186 L 502.1703,525.57 L 504.9696,537.47 L 508.8778,587.2236 L 511.2514,559.5409 L 514.2421,573.3137 L 517.3338,590.1527 L 520.3763,555.3201 L 523.4049,573.8677 L 526.225,594.5837 L 529.2262,563.9361 L 532.188,569.9173 L 534.8844,603.8416 L 539.5842,561.6318 L 543.58,612.1678 L 546.1484,578.0809 L 549.6258,567.0628 L 553.2639,598.4068 L 557.7907,562.1679 L 560.4139,575.3597 L 562.9989,591.6652 L 565.514,563.9514 L 569.0618,573.2063 L 572.1633,589.7822 L 576.0319,564.383 L 579.2472,612.0665 L 582.2137,574.8559 L 584.8649,564.8703 L 588.2945,605.1659 L 591.3033,570.3993 L 593.976,566.9483 L 597.1275,602.5096 L 600.4484,562.743 L 604.2266,575.6732 L 607.9704,576.7213 L 611.4156,568.3055 L 615.2255,593.2967 L 618.7163,562.7568 L 621.4151,570.5429 L 625.9024,579.7191 L 628.1984,556.8408 L 630.7107,571.586 L 633.7799,596.8525 L 637.934,556.1867 L 641.135,574.6483 L 644.0307,597.5633 L 648.0427,565.7801 L 651.7455,573.3707 L 654.8251,595.5901 L 658.1095,561.0916 L 661.0766,572.8158 L 664.3993,592.2198 L 667.6346,558.1837 L 670.3676,572.4823 L 674.1383,586.4501 L 677.4062,562.5968 L 680.3694,577.3461 L 683.8974,580.281 L 686.7041,563.804 L 690.0451,609.6756 L 692.8351,575.1565 L 695.2176,564.4613 L 698.3422,578.7661 L 701.6787,580.0373 L 705.0621,559.745 L 707.6247,575.3116 L 710.665,589.3721 L 713.2368,564.1402 L 716.4565,573.4652 L 719.7726,588.1164 L 722.6103,563.4203 L 727.0604,576.0373 L 730.1509,597.231 L 733.6457,568.7949 L 736.2556,568.0072 L 739.6113,599.5708 L 742.3556,569.22 L 745.2577,570.1102 L 748.5497,593.4097 L 752.0964,558.43 L 757.1347,578.1018 L 760.1255,585.5558 L 763.8369,564.0242 L 767.4715,601.416 L 770.7028,564.7044 L 774.4631,577.9303 L 777.4632,587.8601 L 780.0684,559.1202 L 783.3133,578.472 L 786.1083,584.3366 L 789.3441,564.1769 L 792.9731,600.5396 L 796.4929,561.5376 L 800.5749,609.5276 L 804.9764,561.2728 L 808.6477,611.6652 L 811.8924,573.8386 L 815.0348,570.5265 L 818.7569,586.8493 L 822.6119,568.8272 L 825.4594,601.2252 L 828.4501,568.0941 L 832.227,579.3231 L 835.7178,578.1261 L 838.3943,566.1095 L 841.0206,611.1567 L 844.5857,562.952 L 847.9327,609.7901 L 850.9386,572.0402 L 853.8989,575.111 L 857.1536,578.9126 L 859.8448,569.3642 L 863.1617,603.9384 L 866.3971,576.8118 L 869.2519,569.5388 L 872.7499,592.2906 L 875.9817,562.4738 L 879.5555,607.295 L 882.3518,574.7165 L 885.2014,570.9386 L 888.9416,583.4532 L 892.3162,572.8055 L 895.1255,596.2199 L 897.9262,565.1275 L 900.4222,580.5649 L 903.6589,571.1706 L 907.2527,602.3637 L 911.2496,567.7219 L 914.1828,610.1333 L 917.3226,577.1987 L 920.9951,602.0962 L 924.0882,575.5667 L 928.0172,593.2256 L 930.0,630.0 L 930.0,630.0 L 928.0172,580.7886 L 924.0882,548.7118 L 920.9951,594.3069 L 917.3226,548.888 L 914.1828,609.8391 L 911.2496,530.3095 L 907.2527,594.555 L 903.6589,535.8483 L 900.4222,577.9764 L 897.9262,523.8663 L 895.1255,582.9831 L 892.3162,549.8286 L 888.9416,558.1053 L 885.2014,543.1317 L 882.3518,540.9355 L 879.5555,604.1348 L 875.9817,517.0502 L 872.7499,574.6933 L 869.2519,538.3155 L 866.3971,544.2796 L 863.1617,597.8463 L 859.8448,538.457 L 857.1536,548.4837 L 853.8989,560.6219 L 850.9386,534.6728 L 847.9327,608.4311 L 844.5857,516.3113 L 841.0206,610.7269 L 838.3943,527.1259 L 835.7178,546.4017 L 832.227,576.5866 L 828.4501,525.8447 L 825.4594,592.4793 L 822.6119,537.4568 L 818.7569,563.2031 L 815.0348,543.8046 L 811.8924,537.1327 L 808.6477,611.4239 L 804.9764,511.4067 L 800.5749,607.8578 L 796.4929,512.0132 L 792.9731,591.0135 L 789.3441,518.8193 L 786.1083,557.7116 L 783.3133,574.1651 L 780.0684,506.6234 L 777.4632,564.7916 L 774.4631,572.4019 L 770.7028,517.8232 L 767.4715,592.6587 L 763.8369,518.6614 L 760.1255,560.0617 L 757.1347,572.635 L 752.0964,504.7591 L 748.5497,576.2906 L 745.2577,542.1958 L 742.3556,526.5849 L 739.6113,588.9358 L 736.2556,533.8043 L 733.6457,525.7617 L 730.1509,583.9 L 727.0604,565.0306 L 722.6103,514.3918 L 719.7726,565.1439 L 716.4565,555.1818 L 713.2368,515.508 L 710.665,567.6608 L 707.6247,562.4412 L 705.0621,506.2669 L 701.6787,548.5331 L 698.3422,575.9099 L 695.2176,519.2958 L 692.8351,538.108 L 690.0451,607.9811 L 686.7041,517.4706 L 683.8974,548.6015 L 680.3694,570.7026 L 677.4062,512.2525 L 674.1383,561.3532 L 670.3676,551.7434 L 667.6346,502.6659 L 664.3993,573.2741 L 661.0766,552.6767 L 658.1095,508.4336 L 654.8251,580.2493 L 651.7455,554.6416 L 648.0427,518.1106 L 644.0307,584.1108 L 641.135,560.2068 L 637.934,498.2028 L 633.7799,582.7095 L 630.7107,547.938 L 628.1984,499.1643 L 625.9024,546.877 L 621.4151,544.1575 L 618.7163,511.4842 L 615.2255,575.2273 L 611.4156,534.7262 L 607.9704,540.5605 L 604.2266,564.4561 L 600.4484,511.5091 L 597.1275,594.6427 L 593.976,529.351 L 591.3033,527.6708 L 588.2945,600.0541 L 584.8649,520.9193 L 582.2137,536.6034 L 579.2472,611.967 L 576.0319,518.8352 L 572.1633,567.967 L 569.0618,554.9158 L 565.514,513.608 L 562.9989,571.8731 L 560.4139,562.4647 L 557.7907,509.6895 L 553.2639,585.6923 L 549.6258,529.7015 L 546.1484,542.94 L 543.58,612.0683 L 539.5842,507.4351 L 534.8844,597.7054 L 532.188,540.6219 L 529.2262,513.11 L 526.225,577.9861 L 523.4049,556.6738 L 520.3763,494.8331 L 517.3338,568.3842 L 514.2421,554.5257 L 511.2514,503.9905 L 508.8778,562.2078 L 504.9696,534.1047 L 502.1703,519.5791 L 499.4737,560.7889 L 495.8148,534.9546 L 492.5825,516.3215 L 489.1773,584.7294 L 486.2208,533.5874 L 483.9104,521.8641 L 481.419,539.1425 L 478.7215,597.108 L 474.3093,525.1827 L 471.5425,528.5601 L 467.6613,604.8227 L 464.2553,529.6596 L 461.4745,512.0884 L 458.5584,586.6241 L 455.3571,532.8423 L 452.4033,512.1251 L 449.6977,576.1676 L 445.4988,528.8117 L 441.6458,537.8185 L 439.1801,598.0157 L 436.0414,531.7833 L 433.3223,518.9098 L 430.1642,565.0946 L 426.5142,536.3644 L 424.0545,524.5844 L 421.1016,531.9683 L 417.6851,601.9553 L 414.2939,529.8756 L 411.4007,515.7708 L 407.078,573.1308 L 404.1413,539.0213 L 401.3108,523.8733 L 398.41,541.6712 L 395.6921,606.4333 L 392.2687,527.7337 L 389.3993,523.6925 L 386.3066,588.9834 L 382.9257,531.3306 L 379.8633,512.7695 L 376.1096,587.2973 L 372.9526,535.3976 L 370.1894,521.3256 L 366.6408,571.1148 L 363.4311,537.1802 L 360.4296,521.3427 L 357.0373,566.3793 L 353.6779,537.2108 L 349.8648,518.8014 L 346.4711,555.6744 L 343.6741,611.1529 L 340.4819,532.8305 L 335.8684,557.5093 L 332.7395,537.3529 L 329.785,520.4311 L 326.9125,559.0656 L 322.8874,533.8628 L 319.5375,515.6942 L 315.6465,607.1602 L 311.8588,524.1449 L 307.5545,576.5772 L 303.4716,531.3385 L 299.8463,532.1051 L 297.1539,600.0543 L 293.0874,526.5027 L 288.3857,572.8041 L 285.6905,537.8966 L 282.3091,519.3589 L 278.7308,579.577 L 275.372,536.0083 L 271.2531,521.2881 L 267.6354,568.2541 L 264.9514,538.5683 L 261.7909,521.0928 L 258.8556,567.7747 L 255.7633,536.6923 L 252.4034,514.5724 L 248.7306,610.5223 L 245.7697,528.2395 L 243.3033,520.7628 L 239.9428,594.0186 L 236.5762,534.4344 L 234.0911,521.5423 L 230.5112,580.6327 L 226.7251,529.7937 L 223.3724,535.9704 L 220.8342,610.3459 L 218.0916,526.7023 L 214.4873,576.4903 L 211.6729,533.8522 L 208.5323,525.4425 L 206.3025,584.5391 L 202.8453,527.4301 L 199.9554,551.0482 L 197.5494,542.0185 L 194.6185,521.9836 L 191.4821,586.3725 L 188.0364,529.8381 L 184.9026,542.7375 L 182.1241,541.5966 L 179.9506,529.4725 L 177.071,544.5935 L 173.8415,536.1721 L 169.1257,575.4354 L 166.1133,532.2507 L 163.0601,546.4486 L 159.8819,535.6516 L 157.3496,515.5888 L 153.8301,543.4415 L 151.4082,524.9314 L 148.2812,585.9665 L 145.1565,526.3224 L 141.7456,571.6292 L 137.4734,523.1042 L 132.991,538.6006 L 129.9579,538.9244 L 125.4581,526.8969 L 122.3811,599.8221 L 119.5335,525.0697 L 116.4332,608.9425 L 113.4086,524.632 L 110.7122,547.3637 L 107.9292,530.2018 L 103.9973,534.6108 L 100.7409,549.7174 L 96.41691,554.1487 L 93.56117,578.3263 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#e6564e'>-<path d='M 90.0,630.0 L 93.56117,588.2479 L 96.41691,567.9092 L 100.7409,564.4933 L 103.9973,553.7691 L 107.9292,550.4496 L 110.7122,562.5178 L 113.4086,546.0517 L 116.4332,612.2004 L 119.5335,546.6503 L 122.3811,604.87 L 125.4581,547.9929 L 129.9579,557.0866 L 132.991,556.0511 L 137.4734,545.1601 L 141.7456,582.6816 L 145.1565,547.426 L 148.2812,593.9167 L 151.4082,546.4163 L 153.8301,559.4044 L 157.3496,538.6931 L 159.8819,553.9734 L 163.0601,562.8575 L 166.1133,551.5496 L 169.1257,585.6659 L 173.8415,554.2914 L 177.071,561.4791 L 179.9506,549.4898 L 182.1241,558.1041 L 184.9026,559.9531 L 188.0364,549.7309 L 191.4821,594.2018 L 194.6185,544.255 L 197.5494,558.307 L 199.9554,566.4336 L 202.8453,548.0193 L 206.3025,592.738 L 208.5323,546.3905 L 211.6729,552.5469 L 214.4873,586.4644 L 218.0916,547.5246 L 220.8342,613.5245 L 223.3724,554.5949 L 226.7251,549.7491 L 230.5112,589.6284 L 234.0911,543.812 L 236.5762,552.8634 L 239.9428,600.1583 L 243.3033,542.7216 L 245.7697,548.5372 L 248.7306,613.6992 L 252.4034,537.9295 L 255.7633,554.6064 L 258.8556,579.5697 L 261.7909,543.5563 L 264.9514,555.9939 L 267.6354,580.0385 L 271.2531,543.6502 L 275.372,554.0468 L 278.7308,588.8545 L 282.3091,542.2404 L 285.6905,555.3991 L 288.3857,583.5078 L 293.0874,547.3285 L 297.1539,605.0144 L 299.8463,551.6386 L 303.4716,550.8394 L 307.5545,586.5311 L 311.8588,545.7452 L 315.6465,610.8699 L 319.5375,538.758 L 322.8874,552.539 L 326.9125,572.7345 L 329.785,542.9204 L 332.7395,554.9672 L 335.8684,571.478 L 340.4819,551.7214 L 343.6741,614.2699 L 346.4711,570.0617 L 349.8648,541.8053 L 353.6779,554.8295 L 357.0373,578.5101 L 360.4296,543.5924 L 363.4311,554.8888 L 366.6408,582.3085 L 370.1894,543.6772 L 372.9526,553.6091 L 376.1096,594.8764 L 379.8633,536.3961 L 382.9257,550.7032 L 386.3066,596.1565 L 389.3993,545.0127 L 392.2687,548.2125 L 395.6921,610.246 L 398.41,559.0718 L 401.3108,545.3991 L 404.1413,556.1914 L 407.078,583.7858 L 411.4007,539.1405 L 414.2939,549.6601 L 417.6851,606.5246 L 421.1016,551.4883 L 424.0545,545.9202 L 426.5142,554.2964 L 430.1642,577.4544 L 433.3223,541.9835 L 436.0414,551.0934 L 439.1801,603.2315 L 441.6458,556.0493 L 445.4988,548.9012 L 449.6977,586.1356 L 452.4033,535.988 L 455.3571,551.8112 L 458.5584,594.3533 L 461.4745,535.8814 L 464.2553,549.5644 L 467.6613,608.9361 L 471.5425,548.7359 L 474.3093,546.3186 L 478.7215,602.5489 L 481.419,557.0839 L 483.9104,543.9326 L 486.2208,552.3091 L 489.1773,592.876 L 492.5825,539.7884 L 495.8148,553.3208 L 499.4737,574.0694 L 502.1703,542.3115 L 504.9696,552.6453 L 508.8778,593.5694 L 511.2514,570.2963 L 514.2421,582.7832 L 517.3338,595.995 L 520.3763,566.7727 L 523.4049,583.2667 L 526.225,599.7111 L 529.2262,573.9913 L 532.188,579.8814 L 534.8844,607.4467 L 539.5842,572.8437 L 543.58,615.1741 L 546.1484,585.9078 L 549.6258,577.4556 L 553.2639,602.9661 L 557.7907,573.302 L 560.4139,584.5092 L 562.9989,597.2594 L 565.514,573.9919 L 569.0618,582.6464 L 572.1633,595.6759 L 576.0319,575.1941 L 579.2472,615.0728 L 582.2137,583.2171 L 584.8649,575.5919 L 588.2945,608.6595 L 591.3033,579.4138 L 593.976,577.347 L 597.1275,606.3716 L 600.4484,573.0022 L 604.2266,584.7405 L 607.9704,584.7523 L 611.4156,578.5207 L 615.2255,598.6252 L 618.7163,573.0513 L 621.4151,580.3926 L 625.9024,587.226 L 628.1984,568.0469 L 630.7107,581.2757 L 633.7799,601.6717 L 637.934,567.5014 L 641.135,583.9006 L 644.0307,602.268 L 648.0427,575.5637 L 651.7455,582.7961 L 654.8251,600.5737 L 658.1095,571.6239 L 661.0766,582.3147 L 664.3993,597.7215 L 667.6346,569.1739 L 670.3676,582.0369 L 674.1383,592.9177 L 677.4062,573.6531 L 680.3694,586.1814 L 683.8974,587.7439 L 686.7041,574.6592 L 690.0451,612.8272 L 692.8351,583.459 L 695.2176,575.2255 L 698.3422,587.3651 L 701.6787,587.5281 L 705.0621,570.9877 L 707.6247,584.4581 L 710.665,595.3538 L 713.2368,574.1954 L 716.4565,582.8745 L 719.7726,594.2978 L 722.6103,573.5944 L 727.0604,585.0649 L 730.1509,601.9606 L 733.6457,578.1088 L 736.2556,578.2503 L 739.6113,603.8923 L 742.3556,578.4811 L 745.2577,580.02 L 748.5497,598.7294 L 752.0964,569.4232 L 757.1347,586.8329 L 760.1255,592.1555 L 763.8369,574.8603 L 767.4715,605.4615 L 770.7028,574.6657 L 774.4631,586.657 L 777.4632,594.1296 L 780.0684,570.0062 L 783.3133,587.1062 L 786.1083,591.1726 L 789.3441,575.0071 L 792.9731,604.7144 L 796.4929,572.0728 L 800.5749,612.7013 L 804.9764,571.8681 L 808.6477,614.6803 L 811.8924,582.3555 L 815.0348,580.3526 L 818.7569,593.3096 L 822.6119,578.8795 L 825.4594,605.3045 L 828.4501,577.5695 L 832.227,587.8208 L 835.7178,585.9765 L 838.3943,576.6315 L 841.0206,614.1997 L 844.5857,573.3111 L 847.9327,612.9314 L 850.9386,580.8946 L 853.8989,584.1989 L 857.1536,586.6573 L 859.8448,579.3533 L 863.1617,607.6082 L 866.3971,584.9146 L 869.2519,579.5236 L 872.7499,597.873 L 875.9817,572.9415 L 879.5555,610.6403 L 882.3518,583.2318 L 885.2014,580.7076 L 888.9416,590.4859 L 892.3162,582.2691 L 895.1255,601.1755 L 897.9262,575.234 L 900.4222,588.7412 L 903.6589,580.3479 L 907.2527,606.3667 L 911.2496,577.6303 L 914.1828,613.1675 L 917.3226,585.4865 L 920.9951,606.2078 L 924.0882,584.4079 L 928.0172,598.9754 L 930.0,630.0 L 930.0,630.0 L 928.0172,593.2256 L 924.0882,575.5667 L 920.9951,602.0962 L 917.3226,577.1987 L 914.1828,610.1333 L 911.2496,567.7219 L 907.2527,602.3637 L 903.6589,571.1706 L 900.4222,580.5649 L 897.9262,565.1275 L 895.1255,596.2199 L 892.3162,572.8055 L 888.9416,583.4532 L 885.2014,570.9386 L 882.3518,574.7165 L 879.5555,607.295 L 875.9817,562.4738 L 872.7499,592.2906 L 869.2519,569.5388 L 866.3971,576.8118 L 863.1617,603.9384 L 859.8448,569.3642 L 857.1536,578.9126 L 853.8989,575.111 L 850.9386,572.0402 L 847.9327,609.7901 L 844.5857,562.952 L 841.0206,611.1567 L 838.3943,566.1095 L 835.7178,578.1261 L 832.227,579.3231 L 828.4501,568.0941 L 825.4594,601.2252 L 822.6119,568.8272 L 818.7569,586.8493 L 815.0348,570.5265 L 811.8924,573.8386 L 808.6477,611.6652 L 804.9764,561.2728 L 800.5749,609.5276 L 796.4929,561.5376 L 792.9731,600.5396 L 789.3441,564.1769 L 786.1083,584.3366 L 783.3133,578.472 L 780.0684,559.1202 L 777.4632,587.8601 L 774.4631,577.9303 L 770.7028,564.7044 L 767.4715,601.416 L 763.8369,564.0242 L 760.1255,585.5558 L 757.1347,578.1018 L 752.0964,558.43 L 748.5497,593.4097 L 745.2577,570.1102 L 742.3556,569.22 L 739.6113,599.5708 L 736.2556,568.0072 L 733.6457,568.7949 L 730.1509,597.231 L 727.0604,576.0373 L 722.6103,563.4203 L 719.7726,588.1164 L 716.4565,573.4652 L 713.2368,564.1402 L 710.665,589.3721 L 707.6247,575.3116 L 705.0621,559.745 L 701.6787,580.0373 L 698.3422,578.7661 L 695.2176,564.4613 L 692.8351,575.1565 L 690.0451,609.6756 L 686.7041,563.804 L 683.8974,580.281 L 680.3694,577.3461 L 677.4062,562.5968 L 674.1383,586.4501 L 670.3676,572.4823 L 667.6346,558.1837 L 664.3993,592.2198 L 661.0766,572.8158 L 658.1095,561.0916 L 654.8251,595.5901 L 651.7455,573.3707 L 648.0427,565.7801 L 644.0307,597.5633 L 641.135,574.6483 L 637.934,556.1867 L 633.7799,596.8525 L 630.7107,571.586 L 628.1984,556.8408 L 625.9024,579.7191 L 621.4151,570.5429 L 618.7163,562.7568 L 615.2255,593.2967 L 611.4156,568.3055 L 607.9704,576.7213 L 604.2266,575.6732 L 600.4484,562.743 L 597.1275,602.5096 L 593.976,566.9483 L 591.3033,570.3993 L 588.2945,605.1659 L 584.8649,564.8703 L 582.2137,574.8559 L 579.2472,612.0665 L 576.0319,564.383 L 572.1633,589.7822 L 569.0618,573.2063 L 565.514,563.9514 L 562.9989,591.6652 L 560.4139,575.3597 L 557.7907,562.1679 L 553.2639,598.4068 L 549.6258,567.0628 L 546.1484,578.0809 L 543.58,612.1678 L 539.5842,561.6318 L 534.8844,603.8416 L 532.188,569.9173 L 529.2262,563.9361 L 526.225,594.5837 L 523.4049,573.8677 L 520.3763,555.3201 L 517.3338,590.1527 L 514.2421,573.3137 L 511.2514,559.5409 L 508.8778,587.2236 L 504.9696,537.47 L 502.1703,525.57 L 499.4737,564.186 L 495.8148,538.2821 L 492.5825,522.7959 L 489.1773,586.5419 L 486.2208,537.1368 L 483.9104,527.4568 L 481.419,543.999 L 478.7215,598.0689 L 474.3093,530.195 L 471.5425,534.1097 L 467.6613,605.2869 L 464.2553,533.9047 L 461.4745,518.8155 L 458.5584,588.3319 L 455.3571,536.4965 L 452.4033,518.8047 L 449.6977,578.5509 L 445.4988,533.196 L 441.6458,542.7868 L 439.1801,598.9026 L 436.0414,535.6833 L 433.3223,525.2362 L 430.1642,568.2124 L 426.5142,539.3721 L 424.0545,529.7174 L 421.1016,537.2994 L 417.6851,602.5789 L 414.2939,534.1032 L 411.4007,522.1641 L 407.078,575.7255 L 404.1413,541.6107 L 401.3108,529.1464 L 398.41,546.3832 L 395.6921,606.7759 L 392.2687,532.384 L 389.3993,529.6481 L 386.3066,590.4639 L 382.9257,535.2799 L 379.8633,519.4315 L 376.1096,588.88 L 372.9526,538.6247 L 370.1894,527.1941 L 366.6408,573.9253 L 363.4311,540.0805 L 360.4296,527.071 L 357.0373,569.4311 L 353.6779,540.0433 L 349.8648,525.0653 L 346.4711,559.4238 L 343.6741,611.2577 L 340.4819,536.4566 L 335.8684,561.116 L 332.7395,540.2074 L 329.785,526.3286 L 326.9125,562.5648 L 322.8874,537.4122 L 319.5375,522.2029 L 315.6465,607.4966 L 311.8588,529.5923 L 307.5545,578.9552 L 303.4716,535.419 L 299.8463,537.5261 L 297.1539,600.869 L 293.0874,531.3723 L 288.3857,575.3785 L 285.6905,540.6877 L 282.3091,525.5268 L 278.7308,581.7102 L 275.372,539.1534 L 271.2531,527.1759 L 267.6354,571.2619 L 264.9514,541.4219 L 261.7909,527.0863 L 258.8556,570.7182 L 255.7633,539.7908 L 252.4034,521.1542 L 248.7306,610.6518 L 245.7697,532.8467 L 243.3033,526.899 L 239.9428,595.2217 L 236.5762,537.8481 L 234.0911,527.4037 L 230.5112,582.7042 L 226.7251,534.2142 L 223.3724,541.0241 L 220.8342,610.4859 L 218.0916,531.6389 L 214.4873,578.9062 L 211.6729,537.4509 L 208.5323,531.2519 L 206.3025,586.3482 L 202.8453,532.2451 L 199.9554,555.0793 L 197.5494,544.149 L 194.6185,527.9832 L 191.4821,588.1085 L 188.0364,534.2268 L 184.9026,547.3702 L 182.1241,543.8786 L 179.9506,533.9388 L 177.071,549.1135 L 173.8415,539.5638 L 169.1257,577.9139 L 166.1133,536.3788 L 163.0601,550.8162 L 159.8819,539.2018 L 157.3496,522.0235 L 153.8301,545.446 L 151.4082,530.4792 L 148.2812,587.7588 L 145.1565,531.7002 L 141.7456,574.3806 L 137.4734,529.0263 L 132.991,541.692 L 129.9579,543.9033 L 125.4581,532.3347 L 122.3811,600.6306 L 119.5335,530.8218 L 116.4332,609.1046 L 113.4086,530.621 L 110.7122,549.3595 L 107.9292,535.7426 L 103.9973,539.225 L 100.7409,551.884 L 96.41691,556.0617 L 93.56117,580.6911 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#fba63a'>-<path d='M 90.0,630.0 L 93.56117,593.1279 L 96.41691,577.3355 L 100.7409,574.784 L 103.9973,564.1525 L 107.9292,560.2346 L 110.7122,573.4749 L 113.4086,556.3688 L 116.4332,614.781 L 119.5335,557.679 L 122.3811,607.9943 L 125.4581,559.0932 L 129.9579,566.0291 L 132.991,567.5008 L 137.4734,556.4812 L 141.7456,588.393 L 145.1565,558.8216 L 148.2812,598.1989 L 151.4082,557.9224 L 153.8301,571.16 L 157.3496,550.0024 L 159.8819,565.6192 L 163.0601,571.1113 L 166.1133,563.2359 L 169.1257,591.0502 L 173.8415,566.0206 L 177.071,569.9343 L 179.9506,561.1738 L 182.1241,569.9367 L 184.9026,568.5615 L 188.0364,561.3867 L 191.4821,598.4787 L 194.6185,555.8532 L 197.5494,570.1982 L 199.9554,574.2365 L 202.8453,559.7027 L 206.3025,597.2116 L 208.5323,556.7029 L 211.6729,564.3583 L 214.4873,591.7372 L 218.0916,559.2873 L 220.8342,616.0352 L 223.3724,563.861 L 226.7251,561.4636 L 230.5112,594.4742 L 234.0911,555.493 L 236.5762,564.7505 L 239.9428,603.6625 L 243.3033,553.5213 L 245.7697,560.3638 L 248.7306,616.2069 L 252.4034,549.3551 L 255.7633,566.4988 L 258.8556,585.7196 L 261.7909,555.2778 L 264.9514,567.9286 L 267.6354,586.1251 L 271.2531,555.4281 L 275.372,566.0232 L 278.7308,593.8583 L 282.3091,554.0201 L 285.6905,567.4025 L 288.3857,589.1616 L 293.0874,559.1481 L 297.1539,608.0594 L 299.8463,561.2998 L 303.4716,562.743 L 307.5545,591.8285 L 311.8588,557.5924 L 315.6465,613.5327 L 319.5375,550.0368 L 322.8874,564.4261 L 326.9125,579.7758 L 329.785,554.7212 L 332.7395,566.98 L 335.8684,578.6431 L 340.4819,563.6766 L 343.6741,616.7424 L 346.4711,577.4277 L 349.8648,553.6367 L 353.6779,566.8834 L 357.0373,584.8169 L 360.4296,555.4548 L 363.4311,566.9204 L 366.6408,588.1361 L 370.1894,555.5238 L 372.9526,565.6248 L 376.1096,599.1164 L 379.8633,547.9885 L 382.9257,562.679 L 386.3066,600.2185 L 389.3993,555.5417 L 392.2687,560.1571 L 395.6921,612.9535 L 398.41,567.8041 L 401.3108,557.3056 L 404.1413,568.2794 L 407.078,589.4149 L 411.4007,550.9677 L 414.2939,561.6435 L 417.6851,609.471 L 421.1016,561.2375 L 424.0545,557.8508 L 426.5142,566.3661 L 430.1642,583.8821 L 433.3223,553.8266 L 436.0414,563.0533 L 439.1801,606.3581 L 441.6458,565.1774 L 445.4988,560.8741 L 449.6977,591.4583 L 452.4033,547.8023 L 455.3571,563.8528 L 458.5584,598.6278 L 461.4745,547.5942 L 464.2553,561.606 L 467.6613,611.7322 L 471.5425,558.7876 L 474.3093,558.2597 L 478.7215,605.7807 L 481.419,566.0822 L 483.9104,555.8151 L 486.2208,564.3389 L 489.1773,597.3496 L 492.5825,551.6691 L 495.8148,565.3841 L 499.4737,580.9128 L 502.1703,554.2027 L 504.9696,564.7121 L 508.8778,598.602 L 511.2514,578.9981 L 514.2421,590.771 L 517.3338,600.5995 L 520.3763,576.0211 L 523.4049,591.2075 L 526.225,603.7297 L 529.2262,582.0977 L 532.188,588.2186 L 534.8844,610.2058 L 539.5842,582.1103 L 543.58,617.629 L 546.1484,592.1699 L 549.6258,586.1286 L 553.2639,606.5167 L 557.7907,582.5034 L 560.4139,592.2462 L 562.9989,601.6661 L 565.514,582.0854 L 569.0618,590.6189 L 572.1633,600.3192 L 576.0319,584.1501 L 579.2472,617.533 L 582.2137,589.9102 L 584.8649,584.4922 L 588.2945,611.3282 L 591.3033,586.6641 L 593.976,586.0346 L 597.1275,609.3286 L 600.4484,581.2765 L 604.2266,592.4271 L 607.9704,591.167 L 611.4156,587.0493 L 615.2255,602.8087 L 618.7163,581.3514 L 621.4151,588.6663 L 625.9024,593.2327 L 628.1984,577.1121 L 630.7107,589.4367 L 633.7799,605.426 L 637.934,576.6518 L 641.135,591.7334 L 644.0307,605.9342 L 648.0427,583.4311 L 651.7455,590.7416 L 654.8251,604.4578 L 658.1095,580.1101 L 661.0766,590.3336 L 664.3993,602.0513 L 667.6346,578.0471 L 670.3676,590.0758 L 674.1383,598.0495 L 677.4062,582.7853 L 680.3694,593.6912 L 683.8974,593.6895 L 686.7041,583.6487 L 690.0451,615.3514 L 692.8351,590.0869 L 695.2176,584.1381 L 698.3422,594.7123 L 701.6787,593.4878 L 705.0621,580.1668 L 707.6247,592.1875 L 710.665,600.0658 L 713.2368,582.2865 L 716.4565,590.8353 L 719.7726,599.1806 L 722.6103,581.7971 L 727.0604,592.748 L 730.1509,605.6251 L 733.6457,585.5775 L 736.2556,586.7941 L 739.6113,607.2245 L 742.3556,585.9087 L 745.2577,588.3331 L 748.5497,602.8965 L 752.0964,578.267 L 757.1347,594.254 L 760.1255,597.3854 L 763.8369,583.8116 L 767.4715,608.5624 L 770.7028,582.6869 L 774.4631,594.1099 L 777.4632,599.0876 L 780.0684,578.7708 L 783.3133,594.4763 L 786.1083,596.5733 L 789.3441,583.9678 L 792.9731,607.9209 L 796.4929,580.5414 L 800.5749,615.2472 L 804.9764,580.3503 L 808.6477,617.1605 L 811.8924,589.1536 L 815.0348,588.5917 L 818.7569,598.4021 L 822.6119,587.2647 L 825.4594,608.4106 L 828.4501,585.1463 L 832.227,595.0817 L 835.7178,592.2063 L 838.3943,585.3497 L 841.0206,616.7034 L 844.5857,581.6054 L 847.9327,615.4686 L 850.9386,587.9441 L 853.8989,591.8437 L 857.1536,592.7756 L 859.8448,587.6781 L 863.1617,610.3714 L 866.3971,591.327 L 869.2519,587.8137 L 872.7499,602.2104 L 875.9817,581.3021 L 879.5555,613.279 L 882.3518,589.9613 L 885.2014,588.8204 L 888.9416,595.9959 L 892.3162,590.1465 L 895.1255,604.9721 L 897.9262,583.2512 L 900.4222,595.6856 L 903.6589,587.5712 L 907.2527,609.3635 L 911.2496,585.3679 L 914.1828,615.7046 L 917.3226,591.886 L 920.9951,609.2241 L 924.0882,590.9935 L 928.0172,603.0826 L 930.0,630.0 L 930.0,630.0 L 928.0172,598.9754 L 924.0882,584.4079 L 920.9951,606.2078 L 917.3226,585.4865 L 914.1828,613.1675 L 911.2496,577.6303 L 907.2527,606.3667 L 903.6589,580.3479 L 900.4222,588.7412 L 897.9262,575.234 L 895.1255,601.1755 L 892.3162,582.2691 L 888.9416,590.4859 L 885.2014,580.7076 L 882.3518,583.2318 L 879.5555,610.6403 L 875.9817,572.9415 L 872.7499,597.873 L 869.2519,579.5236 L 866.3971,584.9146 L 863.1617,607.6082 L 859.8448,579.3533 L 857.1536,586.6573 L 853.8989,584.1989 L 850.9386,580.8946 L 847.9327,612.9314 L 844.5857,573.3111 L 841.0206,614.1997 L 838.3943,576.6315 L 835.7178,585.9765 L 832.227,587.8208 L 828.4501,577.5695 L 825.4594,605.3045 L 822.6119,578.8795 L 818.7569,593.3096 L 815.0348,580.3526 L 811.8924,582.3555 L 808.6477,614.6803 L 804.9764,571.8681 L 800.5749,612.7013 L 796.4929,572.0728 L 792.9731,604.7144 L 789.3441,575.0071 L 786.1083,591.1726 L 783.3133,587.1062 L 780.0684,570.0062 L 777.4632,594.1296 L 774.4631,586.657 L 770.7028,574.6657 L 767.4715,605.4615 L 763.8369,574.8603 L 760.1255,592.1555 L 757.1347,586.8329 L 752.0964,569.4232 L 748.5497,598.7294 L 745.2577,580.02 L 742.3556,578.4811 L 739.6113,603.8923 L 736.2556,578.2503 L 733.6457,578.1088 L 730.1509,601.9606 L 727.0604,585.0649 L 722.6103,573.5944 L 719.7726,594.2978 L 716.4565,582.8745 L 713.2368,574.1954 L 710.665,595.3538 L 707.6247,584.4581 L 705.0621,570.9877 L 701.6787,587.5281 L 698.3422,587.3651 L 695.2176,575.2255 L 692.8351,583.459 L 690.0451,612.8272 L 686.7041,574.6592 L 683.8974,587.7439 L 680.3694,586.1814 L 677.4062,573.6531 L 674.1383,592.9177 L 670.3676,582.0369 L 667.6346,569.1739 L 664.3993,597.7215 L 661.0766,582.3147 L 658.1095,571.6239 L 654.8251,600.5737 L 651.7455,582.7961 L 648.0427,575.5637 L 644.0307,602.268 L 641.135,583.9006 L 637.934,567.5014 L 633.7799,601.6717 L 630.7107,581.2757 L 628.1984,568.0469 L 625.9024,587.226 L 621.4151,580.3926 L 618.7163,573.0513 L 615.2255,598.6252 L 611.4156,578.5207 L 607.9704,584.7523 L 604.2266,584.7405 L 600.4484,573.0022 L 597.1275,606.3716 L 593.976,577.347 L 591.3033,579.4138 L 588.2945,608.6595 L 584.8649,575.5919 L 582.2137,583.2171 L 579.2472,615.0728 L 576.0319,575.1941 L 572.1633,595.6759 L 569.0618,582.6464 L 565.514,573.9919 L 562.9989,597.2594 L 560.4139,584.5092 L 557.7907,573.302 L 553.2639,602.9661 L 549.6258,577.4556 L 546.1484,585.9078 L 543.58,615.1741 L 539.5842,572.8437 L 534.8844,607.4467 L 532.188,579.8814 L 529.2262,573.9913 L 526.225,599.7111 L 523.4049,583.2667 L 520.3763,566.7727 L 517.3338,595.995 L 514.2421,582.7832 L 511.2514,570.2963 L 508.8778,593.5694 L 504.9696,552.6453 L 502.1703,542.3115 L 499.4737,574.0694 L 495.8148,553.3208 L 492.5825,539.7884 L 489.1773,592.876 L 486.2208,552.3091 L 483.9104,543.9326 L 481.419,557.0839 L 478.7215,602.5489 L 474.3093,546.3186 L 471.5425,548.7359 L 467.6613,608.9361 L 464.2553,549.5644 L 461.4745,535.8814 L 458.5584,594.3533 L 455.3571,551.8112 L 452.4033,535.988 L 449.6977,586.1356 L 445.4988,548.9012 L 441.6458,556.0493 L 439.1801,603.2315 L 436.0414,551.0934 L 433.3223,541.9835 L 430.1642,577.4544 L 426.5142,554.2964 L 424.0545,545.9202 L 421.1016,551.4883 L 417.6851,606.5246 L 414.2939,549.6601 L 411.4007,539.1405 L 407.078,583.7858 L 404.1413,556.1914 L 401.3108,545.3991 L 398.41,559.0718 L 395.6921,610.246 L 392.2687,548.2125 L 389.3993,545.0127 L 386.3066,596.1565 L 382.9257,550.7032 L 379.8633,536.3961 L 376.1096,594.8764 L 372.9526,553.6091 L 370.1894,543.6772 L 366.6408,582.3085 L 363.4311,554.8888 L 360.4296,543.5924 L 357.0373,578.5101 L 353.6779,554.8295 L 349.8648,541.8053 L 346.4711,570.0617 L 343.6741,614.2699 L 340.4819,551.7214 L 335.8684,571.478 L 332.7395,554.9672 L 329.785,542.9204 L 326.9125,572.7345 L 322.8874,552.539 L 319.5375,538.758 L 315.6465,610.8699 L 311.8588,545.7452 L 307.5545,586.5311 L 303.4716,550.8394 L 299.8463,551.6386 L 297.1539,605.0144 L 293.0874,547.3285 L 288.3857,583.5078 L 285.6905,555.3991 L 282.3091,542.2404 L 278.7308,588.8545 L 275.372,554.0468 L 271.2531,543.6502 L 267.6354,580.0385 L 264.9514,555.9939 L 261.7909,543.5563 L 258.8556,579.5697 L 255.7633,554.6064 L 252.4034,537.9295 L 248.7306,613.6992 L 245.7697,548.5372 L 243.3033,542.7216 L 239.9428,600.1583 L 236.5762,552.8634 L 234.0911,543.812 L 230.5112,589.6284 L 226.7251,549.7491 L 223.3724,554.5949 L 220.8342,613.5245 L 218.0916,547.5246 L 214.4873,586.4644 L 211.6729,552.5469 L 208.5323,546.3905 L 206.3025,592.738 L 202.8453,548.0193 L 199.9554,566.4336 L 197.5494,558.307 L 194.6185,544.255 L 191.4821,594.2018 L 188.0364,549.7309 L 184.9026,559.9531 L 182.1241,558.1041 L 179.9506,549.4898 L 177.071,561.4791 L 173.8415,554.2914 L 169.1257,585.6659 L 166.1133,551.5496 L 163.0601,562.8575 L 159.8819,553.9734 L 157.3496,538.6931 L 153.8301,559.4044 L 151.4082,546.4163 L 148.2812,593.9167 L 145.1565,547.426 L 141.7456,582.6816 L 137.4734,545.1601 L 132.991,556.0511 L 129.9579,557.0866 L 125.4581,547.9929 L 122.3811,604.87 L 119.5335,546.6503 L 116.4332,612.2004 L 113.4086,546.0517 L 110.7122,562.5178 L 107.9292,550.4496 L 103.9973,553.7691 L 100.7409,564.4933 L 96.41691,567.9092 L 93.56117,588.2479 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#bd9a53'>-<path d='M 90.0,630.0 L 93.56117,598.4499 L 96.41691,586.4113 L 100.7409,584.7382 L 103.9973,574.9452 L 107.9292,571.0349 L 110.7122,584.1378 L 113.4086,567.731 L 116.4332,616.7797 L 119.5335,569.3524 L 122.3811,611.1444 L 125.4581,570.6844 L 129.9579,575.7983 L 132.991,578.9376 L 137.4734,568.3713 L 141.7456,594.6692 L 145.1565,570.6166 L 148.2812,602.9121 L 151.4082,569.8677 L 153.8301,582.7183 L 157.3496,562.2976 L 159.8819,577.3255 L 163.0601,580.0767 L 166.1133,575.0708 L 169.1257,596.9171 L 173.8415,577.7621 L 177.071,579.1193 L 179.9506,573.1144 L 182.1241,581.6377 L 184.9026,577.9098 L 188.0364,573.3055 L 191.4821,603.1496 L 194.6185,567.9271 L 197.5494,581.8898 L 199.9554,582.7098 L 202.8453,571.7025 L 206.3025,602.1044 L 208.5323,567.886 L 211.6729,576.2707 L 214.4873,597.4855 L 218.0916,571.3658 L 220.8342,618.1537 L 223.3724,573.9203 L 226.7251,573.4476 L 230.5112,599.7434 L 234.0911,567.6808 L 236.5762,576.6911 L 239.9428,607.4849 L 243.3033,565.2053 L 245.7697,572.4371 L 248.7306,618.3565 L 252.4034,561.7131 L 255.7633,578.4188 L 258.8556,592.3857 L 261.7909,567.5131 L 264.9514,579.7987 L 267.6354,592.7348 L 271.2531,567.6928 L 275.372,577.9849 L 278.7308,599.2931 L 282.3091,566.3576 L 285.6905,579.3624 L 288.3857,595.3027 L 293.0874,571.3147 L 297.1539,611.2366 L 299.8463,571.7489 L 303.4716,574.821 L 307.5545,597.5657 L 311.8588,569.8131 L 315.6465,616.0229 L 319.5375,562.2322 L 322.8874,576.4125 L 326.9125,587.3901 L 329.785,567.0387 L 332.7395,578.957 L 335.8684,586.3907 L 340.4819,575.7317 L 343.6741,618.8867 L 346.4711,585.3744 L 349.8648,566.0012 L 353.6779,578.8968 L 357.0373,591.6379 L 360.4296,567.7812 L 363.4311,578.9314 L 366.6408,594.4663 L 370.1894,567.8419 L 372.9526,577.657 L 376.1096,603.7127 L 379.8633,560.4874 L 382.9257,574.7998 L 386.3066,604.5917 L 389.3993,566.8957 L 392.2687,572.3772 L 395.6921,615.5387 L 398.41,577.2286 L 401.3108,569.6178 L 404.1413,580.2816 L 407.078,595.4974 L 411.4007,563.5148 L 414.2939,573.7861 L 417.6851,612.4831 L 421.1016,571.7225 L 424.0545,570.1612 L 426.5142,578.4599 L 430.1642,590.8247 L 433.3223,566.2134 L 436.0414,575.2059 L 439.1801,609.7191 L 441.6458,575.0083 L 445.4988,573.0841 L 449.6977,597.2048 L 452.4033,560.4739 L 455.3571,576.0153 L 458.5584,603.2476 L 461.4745,560.1642 L 464.2553,573.8583 L 467.6613,614.5012 L 471.5425,569.6002 L 474.3093,570.5532 L 478.7215,609.2584 L 481.419,575.7916 L 483.9104,568.1637 L 486.2208,576.4427 L 489.1773,602.2001 L 492.5825,564.218 L 495.8148,577.5031 L 499.4737,588.3164 L 502.1703,566.6177 L 504.9696,576.8493 L 508.8778,603.2594 L 511.2514,586.6083 L 514.2421,598.3918 L 517.3338,604.9169 L 520.3763,584.1029 L 523.4049,598.8554 L 526.225,607.5815 L 529.2262,589.2523 L 532.188,595.9245 L 534.8844,613.0078 L 539.5842,590.074 L 543.58,619.9789 L 546.1484,597.8131 L 549.6258,593.9361 L 553.2639,609.9739 L 557.7907,590.4448 L 560.4139,599.8107 L 562.9989,605.8209 L 565.514,589.2229 L 569.0618,598.2268 L 572.1633,604.6718 L 576.0319,592.0263 L 579.2472,619.87 L 582.2137,595.9192 L 584.8649,592.356 L 588.2945,614.0403 L 591.3033,593.1182 L 593.976,593.8269 L 597.1275,612.322 L 600.4484,588.5715 L 604.2266,599.9216 L 607.9704,596.9606 L 611.4156,594.811 L 615.2255,606.7879 L 618.7163,588.6551 L 621.4151,596.3746 L 625.9024,598.6804 L 628.1984,585.0464 L 630.7107,597.0757 L 633.7799,609.0676 L 637.934,584.6583 L 641.135,599.2708 L 644.0307,609.4977 L 648.0427,590.4043 L 651.7455,598.3049 L 654.8251,608.2033 L 658.1095,587.583 L 661.0766,597.9461 L 664.3993,606.1515 L 667.6346,585.83 L 670.3676,597.6801 L 674.1383,602.7932 L 677.4062,590.6809 L 680.3694,601.1277 L 683.8974,599.1084 L 686.7041,591.502 L 690.0451,617.8028 L 692.8351,596.0701 L 695.2176,591.945 L 698.3422,602.1259 L 701.6787,598.9167 L 705.0621,588.1928 L 707.6247,599.6862 L 710.665,604.4883 L 713.2368,589.4446 L 716.4565,598.4062 L 719.7726,603.7329 L 722.6103,589.0309 L 727.0604,600.2584 L 730.1509,609.2038 L 733.6457,592.243 L 736.2556,594.5077 L 739.6113,610.5285 L 742.3556,592.5348 L 745.2577,596.0173 L 748.5497,606.8716 L 752.0964,586.0722 L 757.1347,601.6746 L 760.1255,602.216 L 763.8369,591.6291 L 767.4715,611.6708 L 770.7028,589.7875 L 774.4631,601.5199 L 777.4632,603.7056 L 780.0684,586.5044 L 783.3133,601.8346 L 786.1083,601.5689 L 789.3441,591.7765 L 792.9731,611.1239 L 796.4929,588.0465 L 800.5749,617.7268 L 804.9764,587.8948 L 808.6477,619.5039 L 811.8924,595.2866 L 815.0348,596.1691 L 818.7569,603.1458 L 822.6119,594.8609 L 825.4594,611.5325 L 828.4501,591.9433 L 832.227,602.3484 L 835.7178,597.9083 L 838.3943,593.0427 L 841.0206,619.0667 L 844.5857,589.0036 L 847.9327,617.8806 L 850.9386,594.3354 L 853.8989,599.1668 L 857.1536,598.4153 L 859.8448,595.2255 L 863.1617,613.2068 L 866.3971,597.204 L 869.2519,595.2942 L 872.7499,606.3705 L 875.9817,588.8066 L 879.5555,615.8526 L 882.3518,596.1248 L 885.2014,596.2105 L 888.9416,601.1453 L 892.3162,597.4374 L 895.1255,608.6983 L 897.9262,590.5326 L 900.4222,602.5859 L 903.6589,594.2426 L 907.2527,612.4432 L 911.2496,592.5401 L 914.1828,617.8988 L 917.3226,597.9391 L 920.9951,612.3742 L 924.0882,597.356 L 928.0172,607.1975 L 930.0,630.0 L 930.0,630.0 L 928.0172,603.0826 L 924.0882,590.9935 L 920.9951,609.2241 L 917.3226,591.886 L 914.1828,615.7046 L 911.2496,585.3679 L 907.2527,609.3635 L 903.6589,587.5712 L 900.4222,595.6856 L 897.9262,583.2512 L 895.1255,604.9721 L 892.3162,590.1465 L 888.9416,595.9959 L 885.2014,588.8204 L 882.3518,589.9613 L 879.5555,613.279 L 875.9817,581.3021 L 872.7499,602.2104 L 869.2519,587.8137 L 866.3971,591.327 L 863.1617,610.3714 L 859.8448,587.6781 L 857.1536,592.7756 L 853.8989,591.8437 L 850.9386,587.9441 L 847.9327,615.4686 L 844.5857,581.6054 L 841.0206,616.7034 L 838.3943,585.3497 L 835.7178,592.2063 L 832.227,595.0817 L 828.4501,585.1463 L 825.4594,608.4106 L 822.6119,587.2647 L 818.7569,598.4021 L 815.0348,588.5917 L 811.8924,589.1536 L 808.6477,617.1605 L 804.9764,580.3503 L 800.5749,615.2472 L 796.4929,580.5414 L 792.9731,607.9209 L 789.3441,583.9678 L 786.1083,596.5733 L 783.3133,594.4763 L 780.0684,578.7708 L 777.4632,599.0876 L 774.4631,594.1099 L 770.7028,582.6869 L 767.4715,608.5624 L 763.8369,583.8116 L 760.1255,597.3854 L 757.1347,594.254 L 752.0964,578.267 L 748.5497,602.8965 L 745.2577,588.3331 L 742.3556,585.9087 L 739.6113,607.2245 L 736.2556,586.7941 L 733.6457,585.5775 L 730.1509,605.6251 L 727.0604,592.748 L 722.6103,581.7971 L 719.7726,599.1806 L 716.4565,590.8353 L 713.2368,582.2865 L 710.665,600.0658 L 707.6247,592.1875 L 705.0621,580.1668 L 701.6787,593.4878 L 698.3422,594.7123 L 695.2176,584.1381 L 692.8351,590.0869 L 690.0451,615.3514 L 686.7041,583.6487 L 683.8974,593.6895 L 680.3694,593.6912 L 677.4062,582.7853 L 674.1383,598.0495 L 670.3676,590.0758 L 667.6346,578.0471 L 664.3993,602.0513 L 661.0766,590.3336 L 658.1095,580.1101 L 654.8251,604.4578 L 651.7455,590.7416 L 648.0427,583.4311 L 644.0307,605.9342 L 641.135,591.7334 L 637.934,576.6518 L 633.7799,605.426 L 630.7107,589.4367 L 628.1984,577.1121 L 625.9024,593.2327 L 621.4151,588.6663 L 618.7163,581.3514 L 615.2255,602.8087 L 611.4156,587.0493 L 607.9704,591.167 L 604.2266,592.4271 L 600.4484,581.2765 L 597.1275,609.3286 L 593.976,586.0346 L 591.3033,586.6641 L 588.2945,611.3282 L 584.8649,584.4922 L 582.2137,589.9102 L 579.2472,617.533 L 576.0319,584.1501 L 572.1633,600.3192 L 569.0618,590.6189 L 565.514,582.0854 L 562.9989,601.6661 L 560.4139,592.2462 L 557.7907,582.5034 L 553.2639,606.5167 L 549.6258,586.1286 L 546.1484,592.1699 L 543.58,617.629 L 539.5842,582.1103 L 534.8844,610.2058 L 532.188,588.2186 L 529.2262,582.0977 L 526.225,603.7297 L 523.4049,591.2075 L 520.3763,576.0211 L 517.3338,600.5995 L 514.2421,590.771 L 511.2514,578.9981 L 508.8778,598.602 L 504.9696,564.7121 L 502.1703,554.2027 L 499.4737,580.9128 L 495.8148,565.3841 L 492.5825,551.6691 L 489.1773,597.3496 L 486.2208,564.3389 L 483.9104,555.8151 L 481.419,566.0822 L 478.7215,605.7807 L 474.3093,558.2597 L 471.5425,558.7876 L 467.6613,611.7322 L 464.2553,561.606 L 461.4745,547.5942 L 458.5584,598.6278 L 455.3571,563.8528 L 452.4033,547.8023 L 449.6977,591.4583 L 445.4988,560.8741 L 441.6458,565.1774 L 439.1801,606.3581 L 436.0414,563.0533 L 433.3223,553.8266 L 430.1642,583.8821 L 426.5142,566.3661 L 424.0545,557.8508 L 421.1016,561.2375 L 417.6851,609.471 L 414.2939,561.6435 L 411.4007,550.9677 L 407.078,589.4149 L 404.1413,568.2794 L 401.3108,557.3056 L 398.41,567.8041 L 395.6921,612.9535 L 392.2687,560.1571 L 389.3993,555.5417 L 386.3066,600.2185 L 382.9257,562.679 L 379.8633,547.9885 L 376.1096,599.1164 L 372.9526,565.6248 L 370.1894,555.5238 L 366.6408,588.1361 L 363.4311,566.9204 L 360.4296,555.4548 L 357.0373,584.8169 L 353.6779,566.8834 L 349.8648,553.6367 L 346.4711,577.4277 L 343.6741,616.7424 L 340.4819,563.6766 L 335.8684,578.6431 L 332.7395,566.98 L 329.785,554.7212 L 326.9125,579.7758 L 322.8874,564.4261 L 319.5375,550.0368 L 315.6465,613.5327 L 311.8588,557.5924 L 307.5545,591.8285 L 303.4716,562.743 L 299.8463,561.2998 L 297.1539,608.0594 L 293.0874,559.1481 L 288.3857,589.1616 L 285.6905,567.4025 L 282.3091,554.0201 L 278.7308,593.8583 L 275.372,566.0232 L 271.2531,555.4281 L 267.6354,586.1251 L 264.9514,567.9286 L 261.7909,555.2778 L 258.8556,585.7196 L 255.7633,566.4988 L 252.4034,549.3551 L 248.7306,616.2069 L 245.7697,560.3638 L 243.3033,553.5213 L 239.9428,603.6625 L 236.5762,564.7505 L 234.0911,555.493 L 230.5112,594.4742 L 226.7251,561.4636 L 223.3724,563.861 L 220.8342,616.0352 L 218.0916,559.2873 L 214.4873,591.7372 L 211.6729,564.3583 L 208.5323,556.7029 L 206.3025,597.2116 L 202.8453,559.7027 L 199.9554,574.2365 L 197.5494,570.1982 L 194.6185,555.8532 L 191.4821,598.4787 L 188.0364,561.3867 L 184.9026,568.5615 L 182.1241,569.9367 L 179.9506,561.1738 L 177.071,569.9343 L 173.8415,566.0206 L 169.1257,591.0502 L 166.1133,563.2359 L 163.0601,571.1113 L 159.8819,565.6192 L 157.3496,550.0024 L 153.8301,571.16 L 151.4082,557.9224 L 148.2812,598.1989 L 145.1565,558.8216 L 141.7456,588.393 L 137.4734,556.4812 L 132.991,567.5008 L 129.9579,566.0291 L 125.4581,559.0932 L 122.3811,607.9943 L 119.5335,557.679 L 116.4332,614.781 L 113.4086,556.3688 L 110.7122,573.4749 L 107.9292,560.2346 L 103.9973,564.1525 L 100.7409,574.784 L 96.41691,577.3355 L 93.56117,593.1279 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5d01a8'>-<path d='M 90.0,630.0 L 93.56117,603.1516 L 96.41691,597.1769 L 100.7409,595.9589 L 103.9973,584.0961 L 107.9292,580.3165 L 110.7122,595.6536 L 113.4086,577.6041 L 116.4332,618.7878 L 119.5335,578.6971 L 122.3811,614.1243 L 125.4581,580.1994 L 129.9579,584.6102 L 132.991,590.0922 L 137.4734,578.0022 L 141.7456,600.3661 L 145.1565,580.6997 L 148.2812,607.2527 L 151.4082,579.8524 L 153.8301,594.513 L 157.3496,573.5345 L 159.8819,588.4141 L 163.0601,588.3762 L 166.1133,585.8849 L 169.1257,602.3924 L 173.8415,589.0092 L 177.071,587.6229 L 179.9506,583.698 L 182.1241,593.2973 L 184.9026,586.5778 L 188.0364,583.8715 L 191.4821,607.5562 L 194.6185,577.947 L 197.5494,593.7887 L 199.9554,590.5925 L 202.8453,582.1614 L 206.3025,606.6843 L 208.5323,578.2597 L 211.6729,587.3475 L 214.4873,602.8492 L 218.0916,581.832 L 220.8342,619.4997 L 223.3724,583.2679 L 226.7251,584.0723 L 230.5112,604.7387 L 234.0911,577.7037 L 236.5762,587.9382 L 239.9428,611.1723 L 243.3033,576.1119 L 245.7697,583.2145 L 248.7306,619.663 L 252.4034,573.2538 L 255.7633,589.7393 L 258.8556,598.6889 L 261.7909,577.5536 L 264.9514,591.3746 L 267.6354,598.9675 L 271.2531,577.8713 L 275.372,589.439 L 278.7308,604.4484 L 282.3091,576.3482 L 285.6905,590.909 L 288.3857,601.0951 L 293.0874,581.825 L 297.1539,614.2076 L 299.8463,581.5648 L 303.4716,585.8068 L 307.5545,603.0468 L 311.8588,580.2822 L 315.6465,617.8445 L 319.5375,573.6731 L 322.8874,587.595 L 326.9125,594.6005 L 329.785,577.1541 L 332.7395,590.5417 L 335.8684,593.7391 L 340.4819,586.97 L 343.6741,619.998 L 346.4711,592.9458 L 349.8648,576.0857 L 353.6779,590.4786 L 357.0373,598.1246 L 360.4296,578.0609 L 363.4311,590.4369 L 366.6408,600.4378 L 370.1894,578.0953 L 372.9526,589.0597 L 376.1096,608.137 L 379.8633,572.2924 L 382.9257,585.9016 L 386.3066,608.9014 L 389.3993,577.6379 L 392.2687,583.184 L 395.6921,617.563 L 398.41,586.1594 L 401.3108,580.0708 L 404.1413,592.041 L 407.078,601.3367 L 411.4007,574.3304 L 414.2939,584.8468 L 417.6851,615.2692 L 421.1016,581.7175 L 424.0545,580.6627 L 426.5142,589.9184 L 430.1642,597.4553 L 433.3223,576.3009 L 436.0414,586.2181 L 439.1801,613.1408 L 441.6458,584.3765 L 445.4988,584.0054 L 449.6977,602.7403 L 452.4033,572.3141 L 455.3571,587.1978 L 458.5584,607.7409 L 461.4745,572.1629 L 464.2553,584.8104 L 467.6613,616.7882 L 471.5425,579.9079 L 474.3093,581.1544 L 478.7215,612.7667 L 481.419,585.0086 L 483.9104,578.5007 L 486.2208,587.8014 L 489.1773,606.8681 L 492.5825,574.6166 L 495.8148,588.8824 L 499.4737,595.3535 L 502.1703,576.8079 L 504.9696,588.2021 L 508.8778,609.338 L 511.2514,597.415 L 514.2421,604.946 L 517.3338,610.4524 L 520.3763,595.5584 L 523.4049,605.2525 L 526.225,612.3346 L 529.2262,599.2385 L 532.188,603.1775 L 534.8844,616.2269 L 539.5842,598.949 L 543.58,620.5117 L 546.1484,605.483 L 549.6258,601.7424 L 553.2639,614.1486 L 557.7907,599.2126 L 560.4139,605.9597 L 562.9989,611.1039 L 565.514,599.2135 L 569.0618,604.7957 L 572.1633,610.2411 L 576.0319,600.3362 L 579.2472,620.4557 L 582.2137,604.1058 L 584.8649,600.5837 L 588.2945,616.9497 L 591.3033,602.024 L 593.976,601.6655 L 597.1275,615.7304 L 600.4484,598.75 L 604.2266,606.0648 L 607.9704,604.7757 L 611.4156,602.3619 L 615.2255,611.773 L 618.7163,598.9026 L 621.4151,603.4294 L 625.9024,605.9862 L 628.1984,596.2334 L 630.7107,604.0277 L 633.7799,613.4684 L 637.934,595.9656 L 641.135,605.6004 L 644.0307,613.7957 L 648.0427,600.0543 L 651.7455,604.8987 L 654.8251,612.7905 L 658.1095,598.0257 L 661.0766,604.5532 L 664.3993,611.3024 L 667.6346,596.7777 L 670.3676,604.4149 L 674.1383,608.9775 L 677.4062,599.3841 L 680.3694,606.9568 L 683.8974,606.3115 L 686.7041,599.9777 L 690.0451,619.1108 L 692.8351,604.0967 L 695.2176,600.2695 L 698.3422,607.5674 L 701.6787,606.152 L 705.0621,597.9441 L 707.6247,605.8764 L 710.665,610.1119 L 713.2368,599.3574 L 716.4565,604.9619 L 719.7726,609.5899 L 722.6103,599.1111 L 727.0604,606.293 L 730.1509,613.4916 L 733.6457,601.3587 L 736.2556,602.1335 L 739.6113,614.3964 L 742.3556,601.5816 L 745.2577,603.1411 L 748.5497,611.8053 L 752.0964,596.8863 L 757.1347,607.285 L 760.1255,608.5104 L 763.8369,600.03 L 767.4715,615.2598 L 770.7028,599.6166 L 774.4631,607.2007 L 777.4632,609.6228 L 780.0684,597.2025 L 783.3133,607.4303 L 786.1083,608.0233 L 789.3441,600.101 L 792.9731,614.8186 L 796.4929,598.3337 L 800.5749,619.1507 L 804.9764,598.1731 L 808.6477,620.2936 L 811.8924,603.4834 L 815.0348,603.331 L 818.7569,609.2038 L 822.6119,602.312 L 825.4594,615.1172 L 828.4501,601.0531 L 832.227,607.8222 L 835.7178,605.3344 L 838.3943,601.012 L 841.0206,620.0135 L 844.5857,598.9634 L 847.9327,619.3324 L 850.9386,602.7347 L 853.8989,605.4245 L 857.1536,605.6506 L 859.8448,602.59 L 863.1617,616.2762 L 866.3971,604.7652 L 869.2519,602.5941 L 872.7499,611.3937 L 875.9817,598.6783 L 879.5555,618.0089 L 882.3518,604.0104 L 885.2014,603.233 L 888.9416,607.5674 L 892.3162,604.0929 L 895.1255,613.0418 L 897.9262,599.8171 L 900.4222,608.0172 L 903.6589,602.4379 L 907.2527,615.7607 L 911.2496,601.0863 L 914.1828,619.3447 L 917.3226,604.9395 L 920.9951,615.6051 L 924.0882,604.2449 L 928.0172,611.635 L 930.0,630.0 L 930.0,630.0 L 928.0172,607.1975 L 924.0882,597.356 L 920.9951,612.3742 L 917.3226,597.9391 L 914.1828,617.8988 L 911.2496,592.5401 L 907.2527,612.4432 L 903.6589,594.2426 L 900.4222,602.5859 L 897.9262,590.5326 L 895.1255,608.6983 L 892.3162,597.4374 L 888.9416,601.1453 L 885.2014,596.2105 L 882.3518,596.1248 L 879.5555,615.8526 L 875.9817,588.8066 L 872.7499,606.3705 L 869.2519,595.2942 L 866.3971,597.204 L 863.1617,613.2068 L 859.8448,595.2255 L 857.1536,598.4153 L 853.8989,599.1668 L 850.9386,594.3354 L 847.9327,617.8806 L 844.5857,589.0036 L 841.0206,619.0667 L 838.3943,593.0427 L 835.7178,597.9083 L 832.227,602.3484 L 828.4501,591.9433 L 825.4594,611.5325 L 822.6119,594.8609 L 818.7569,603.1458 L 815.0348,596.1691 L 811.8924,595.2866 L 808.6477,619.5039 L 804.9764,587.8948 L 800.5749,617.7268 L 796.4929,588.0465 L 792.9731,611.1239 L 789.3441,591.7765 L 786.1083,601.5689 L 783.3133,601.8346 L 780.0684,586.5044 L 777.4632,603.7056 L 774.4631,601.5199 L 770.7028,589.7875 L 767.4715,611.6708 L 763.8369,591.6291 L 760.1255,602.216 L 757.1347,601.6746 L 752.0964,586.0722 L 748.5497,606.8716 L 745.2577,596.0173 L 742.3556,592.5348 L 739.6113,610.5285 L 736.2556,594.5077 L 733.6457,592.243 L 730.1509,609.2038 L 727.0604,600.2584 L 722.6103,589.0309 L 719.7726,603.7329 L 716.4565,598.4062 L 713.2368,589.4446 L 710.665,604.4883 L 707.6247,599.6862 L 705.0621,588.1928 L 701.6787,598.9167 L 698.3422,602.1259 L 695.2176,591.945 L 692.8351,596.0701 L 690.0451,617.8028 L 686.7041,591.502 L 683.8974,599.1084 L 680.3694,601.1277 L 677.4062,590.6809 L 674.1383,602.7932 L 670.3676,597.6801 L 667.6346,585.83 L 664.3993,606.1515 L 661.0766,597.9461 L 658.1095,587.583 L 654.8251,608.2033 L 651.7455,598.3049 L 648.0427,590.4043 L 644.0307,609.4977 L 641.135,599.2708 L 637.934,584.6583 L 633.7799,609.0676 L 630.7107,597.0757 L 628.1984,585.0464 L 625.9024,598.6804 L 621.4151,596.3746 L 618.7163,588.6551 L 615.2255,606.7879 L 611.4156,594.811 L 607.9704,596.9606 L 604.2266,599.9216 L 600.4484,588.5715 L 597.1275,612.322 L 593.976,593.8269 L 591.3033,593.1182 L 588.2945,614.0403 L 584.8649,592.356 L 582.2137,595.9192 L 579.2472,619.87 L 576.0319,592.0263 L 572.1633,604.6718 L 569.0618,598.2268 L 565.514,589.2229 L 562.9989,605.8209 L 560.4139,599.8107 L 557.7907,590.4448 L 553.2639,609.9739 L 549.6258,593.9361 L 546.1484,597.8131 L 543.58,619.9789 L 539.5842,590.074 L 534.8844,613.0078 L 532.188,595.9245 L 529.2262,589.2523 L 526.225,607.5815 L 523.4049,598.8554 L 520.3763,584.1029 L 517.3338,604.9169 L 514.2421,598.3918 L 511.2514,586.6083 L 508.8778,603.2594 L 504.9696,576.8493 L 502.1703,566.6177 L 499.4737,588.3164 L 495.8148,577.5031 L 492.5825,564.218 L 489.1773,602.2001 L 486.2208,576.4427 L 483.9104,568.1637 L 481.419,575.7916 L 478.7215,609.2584 L 474.3093,570.5532 L 471.5425,569.6002 L 467.6613,614.5012 L 464.2553,573.8583 L 461.4745,560.1642 L 458.5584,603.2476 L 455.3571,576.0153 L 452.4033,560.4739 L 449.6977,597.2048 L 445.4988,573.0841 L 441.6458,575.0083 L 439.1801,609.7191 L 436.0414,575.2059 L 433.3223,566.2134 L 430.1642,590.8247 L 426.5142,578.4599 L 424.0545,570.1612 L 421.1016,571.7225 L 417.6851,612.4831 L 414.2939,573.7861 L 411.4007,563.5148 L 407.078,595.4974 L 404.1413,580.2816 L 401.3108,569.6178 L 398.41,577.2286 L 395.6921,615.5387 L 392.2687,572.3772 L 389.3993,566.8957 L 386.3066,604.5917 L 382.9257,574.7998 L 379.8633,560.4874 L 376.1096,603.7127 L 372.9526,577.657 L 370.1894,567.8419 L 366.6408,594.4663 L 363.4311,578.9314 L 360.4296,567.7812 L 357.0373,591.6379 L 353.6779,578.8968 L 349.8648,566.0012 L 346.4711,585.3744 L 343.6741,618.8867 L 340.4819,575.7317 L 335.8684,586.3907 L 332.7395,578.957 L 329.785,567.0387 L 326.9125,587.3901 L 322.8874,576.4125 L 319.5375,562.2322 L 315.6465,616.0229 L 311.8588,569.8131 L 307.5545,597.5657 L 303.4716,574.821 L 299.8463,571.7489 L 297.1539,611.2366 L 293.0874,571.3147 L 288.3857,595.3027 L 285.6905,579.3624 L 282.3091,566.3576 L 278.7308,599.2931 L 275.372,577.9849 L 271.2531,567.6928 L 267.6354,592.7348 L 264.9514,579.7987 L 261.7909,567.5131 L 258.8556,592.3857 L 255.7633,578.4188 L 252.4034,561.7131 L 248.7306,618.3565 L 245.7697,572.4371 L 243.3033,565.2053 L 239.9428,607.4849 L 236.5762,576.6911 L 234.0911,567.6808 L 230.5112,599.7434 L 226.7251,573.4476 L 223.3724,573.9203 L 220.8342,618.1537 L 218.0916,571.3658 L 214.4873,597.4855 L 211.6729,576.2707 L 208.5323,567.886 L 206.3025,602.1044 L 202.8453,571.7025 L 199.9554,582.7098 L 197.5494,581.8898 L 194.6185,567.9271 L 191.4821,603.1496 L 188.0364,573.3055 L 184.9026,577.9098 L 182.1241,581.6377 L 179.9506,573.1144 L 177.071,579.1193 L 173.8415,577.7621 L 169.1257,596.9171 L 166.1133,575.0708 L 163.0601,580.0767 L 159.8819,577.3255 L 157.3496,562.2976 L 153.8301,582.7183 L 151.4082,569.8677 L 148.2812,602.9121 L 145.1565,570.6166 L 141.7456,594.6692 L 137.4734,568.3713 L 132.991,578.9376 L 129.9579,575.7983 L 125.4581,570.6844 L 122.3811,611.1444 L 119.5335,569.3524 L 116.4332,616.7797 L 113.4086,567.731 L 110.7122,584.1378 L 107.9292,571.0349 L 103.9973,574.9452 L 100.7409,584.7382 L 96.41691,586.4113 L 93.56117,598.4499 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#7e1593'>-<path d='M 90.0,630.0 L 93.56117,608.2194 L 96.41691,609.2097 L 100.7409,608.661 L 103.9973,597.14 L 107.9292,592.2612 L 110.7122,608.8577 L 113.4086,590.2129 L 116.4332,618.8935 L 119.5335,592.1761 L 122.3811,615.5986 L 125.4581,593.7153 L 129.9579,594.9008 L 132.991,603.735 L 137.4734,591.6732 L 141.7456,605.8866 L 145.1565,594.4146 L 148.2812,610.7087 L 151.4082,593.6255 L 153.8301,608.2861 L 157.3496,587.1138 L 159.8819,602.1907 L 163.0601,597.5043 L 166.1133,599.6985 L 169.1257,607.351 L 173.8415,602.8228 L 177.071,597.0328 L 179.9506,597.5521 L 182.1241,607.1514 L 184.9026,596.1867 L 188.0364,597.6939 L 191.4821,610.9084 L 194.6185,591.7924 L 197.5494,607.634 L 199.9554,599.0124 L 202.8453,596.005 L 206.3025,610.3183 L 208.5323,590.3242 L 211.6729,601.2457 L 214.4873,607.5947 L 218.0916,595.7126 L 220.8342,619.5279 L 223.3724,593.8175 L 226.7251,597.9458 L 230.5112,608.8589 L 234.0911,591.5913 L 236.5762,601.8258 L 239.9428,613.3865 L 243.3033,588.7928 L 245.7697,597.1496 L 248.7306,619.7123 L 252.4034,586.8843 L 255.7633,603.6446 L 258.8556,604.6621 L 261.7909,591.4729 L 264.9514,605.2939 L 267.6354,604.865 L 271.2531,591.8135 L 275.372,603.3812 L 278.7308,608.7623 L 282.3091,590.2992 L 285.6905,604.86 L 288.3857,606.3602 L 293.0874,595.7636 L 297.1539,615.564 L 299.8463,592.5777 L 303.4716,599.7561 L 307.5545,607.787 L 311.8588,594.2455 L 315.6465,618.2743 L 319.5375,587.0516 L 322.8874,601.5214 L 326.9125,601.8103 L 329.785,591.1245 L 332.7395,604.5121 L 335.8684,601.125 L 340.4819,600.9492 L 343.6741,620.005 L 346.4711,600.5995 L 349.8648,590.0561 L 353.6779,604.449 L 357.0373,604.3004 L 360.4296,592.0419 L 363.4311,604.4179 L 366.6408,605.9354 L 370.1894,592.0815 L 372.9526,603.0459 L 376.1096,611.3182 L 379.8633,586.0478 L 382.9257,599.8667 L 386.3066,611.7956 L 389.3993,589.8433 L 392.2687,597.186 L 395.6921,618.1196 L 398.41,595.7912 L 401.3108,594.0729 L 404.1413,606.0431 L 407.078,606.5137 L 411.4007,588.3166 L 414.2939,598.833 L 417.6851,616.3966 L 421.1016,592.7885 L 424.0545,594.6595 L 426.5142,603.9152 L 430.1642,603.7649 L 433.3223,590.2925 L 436.0414,600.2097 L 439.1801,614.7173 L 441.6458,594.5579 L 445.4988,597.9899 L 449.6977,607.4506 L 452.4033,586.3003 L 455.3571,601.184 L 458.5584,610.9433 L 461.4745,585.9906 L 464.2553,598.8178 L 467.6613,617.558 L 471.5425,591.3893 L 474.3093,595.1512 L 478.7215,614.486 L 481.419,595.0103 L 483.9104,592.5134 L 486.2208,601.8141 L 489.1773,610.3735 L 492.5825,588.6205 L 495.8148,602.8862 L 499.4737,602.2744 L 502.1703,590.8241 L 504.9696,602.2183 L 508.8778,612.2216 L 511.2514,603.8269 L 514.2421,611.9427 L 517.3338,612.9309 L 520.3763,602.5234 L 523.4049,612.2632 L 526.225,614.2335 L 529.2262,605.0884 L 532.188,610.1688 L 534.8844,616.8998 L 539.5842,605.928 L 543.58,620.5117 L 546.1484,609.5538 L 549.6258,608.7426 L 553.2639,615.6019 L 557.7907,606.2111 L 560.4139,612.9582 L 562.9989,613.3815 L 565.514,605.0564 L 569.0618,611.7941 L 572.1633,612.7477 L 576.0319,607.324 L 579.2472,620.4557 L 582.2137,608.5905 L 584.8649,607.5786 L 588.2945,617.5327 L 591.3033,607.0495 L 593.976,608.6551 L 597.1275,616.6288 L 600.4484,604.7637 L 604.2266,613.058 L 607.9704,609.0227 L 611.4156,609.3533 L 615.2255,613.8392 L 618.7163,604.9604 L 621.4151,610.4348 L 625.9024,609.7998 L 628.1984,603.0151 L 630.7107,611.0173 L 633.7799,615.1295 L 637.934,602.8495 L 641.135,612.583 L 644.0307,615.3705 L 648.0427,605.6911 L 651.7455,611.8707 L 654.8251,614.589 L 658.1095,604.2649 L 661.0766,611.5234 L 664.3993,613.5113 L 667.6346,603.3921 L 670.3676,611.3992 L 674.1383,611.9738 L 677.4062,606.3561 L 680.3694,613.9287 L 683.8974,610.1004 L 686.7041,606.9603 L 690.0451,619.2658 L 692.8351,608.5603 L 695.2176,607.2186 L 698.3422,614.5165 L 701.6787,609.9692 L 705.0621,604.9108 L 707.6247,612.8431 L 710.665,612.7136 L 713.2368,605.2372 L 716.4565,611.9215 L 719.7726,612.359 L 722.6103,605.0878 L 727.0604,613.242 L 730.1509,615.1016 L 733.6457,606.6485 L 736.2556,609.0791 L 739.6113,615.6682 L 742.3556,606.8255 L 745.2577,610.0972 L 748.5497,613.8715 L 752.0964,603.5183 L 757.1347,614.2429 L 760.1255,611.6194 L 763.8369,607.002 L 767.4715,616.3203 L 770.7028,605.4331 L 774.4631,614.148 L 777.4632,612.4781 L 780.0684,603.7552 L 783.3133,614.36 L 786.1083,611.3226 L 789.3441,607.0202 L 792.9731,615.9829 L 796.4929,604.631 L 800.5749,619.348 L 804.9764,604.5338 L 808.6477,620.3042 L 811.8924,608.1443 L 815.0348,610.2431 L 818.7569,612.223 L 822.6119,609.21 L 825.4594,616.2234 L 828.4501,606.5102 L 832.227,614.7061 L 835.7178,609.4757 L 838.3943,607.9188 L 841.0206,620.0558 L 844.5857,605.1603 L 847.9327,619.4945 L 850.9386,607.6933 L 853.8989,612.2908 L 857.1536,609.7355 L 859.8448,609.4176 L 863.1617,617.0566 L 866.3971,609.1337 L 869.2519,609.3688 L 872.7499,613.7241 L 875.9817,604.9827 L 879.5555,618.4123 L 882.3518,608.7488 L 885.2014,609.9918 L 888.9416,611.0974 L 892.3162,610.813 L 895.1255,614.902 L 897.9262,605.8802 L 900.4222,614.7038 L 903.6589,607.7982 L 907.2527,616.881 L 911.2496,607.0965 L 914.1828,619.3659 L 917.3226,609.6692 L 920.9951,616.8646 L 924.0882,609.6897 L 928.0172,614.3688 L 930.0,630.0 L 930.0,630.0 L 928.0172,611.635 L 924.0882,604.2449 L 920.9951,615.6051 L 917.3226,604.9395 L 914.1828,619.3447 L 911.2496,601.0863 L 907.2527,615.7607 L 903.6589,602.4379 L 900.4222,608.0172 L 897.9262,599.8171 L 895.1255,613.0418 L 892.3162,604.0929 L 888.9416,607.5674 L 885.2014,603.233 L 882.3518,604.0104 L 879.5555,618.0089 L 875.9817,598.6783 L 872.7499,611.3937 L 869.2519,602.5941 L 866.3971,604.7652 L 863.1617,616.2762 L 859.8448,602.59 L 857.1536,605.6506 L 853.8989,605.4245 L 850.9386,602.7347 L 847.9327,619.3324 L 844.5857,598.9634 L 841.0206,620.0135 L 838.3943,601.012 L 835.7178,605.3344 L 832.227,607.8222 L 828.4501,601.0531 L 825.4594,615.1172 L 822.6119,602.312 L 818.7569,609.2038 L 815.0348,603.331 L 811.8924,603.4834 L 808.6477,620.2936 L 804.9764,598.1731 L 800.5749,619.1507 L 796.4929,598.3337 L 792.9731,614.8186 L 789.3441,600.101 L 786.1083,608.0233 L 783.3133,607.4303 L 780.0684,597.2025 L 777.4632,609.6228 L 774.4631,607.2007 L 770.7028,599.6166 L 767.4715,615.2598 L 763.8369,600.03 L 760.1255,608.5104 L 757.1347,607.285 L 752.0964,596.8863 L 748.5497,611.8053 L 745.2577,603.1411 L 742.3556,601.5816 L 739.6113,614.3964 L 736.2556,602.1335 L 733.6457,601.3587 L 730.1509,613.4916 L 727.0604,606.293 L 722.6103,599.1111 L 719.7726,609.5899 L 716.4565,604.9619 L 713.2368,599.3574 L 710.665,610.1119 L 707.6247,605.8764 L 705.0621,597.9441 L 701.6787,606.152 L 698.3422,607.5674 L 695.2176,600.2695 L 692.8351,604.0967 L 690.0451,619.1108 L 686.7041,599.9777 L 683.8974,606.3115 L 680.3694,606.9568 L 677.4062,599.3841 L 674.1383,608.9775 L 670.3676,604.4149 L 667.6346,596.7777 L 664.3993,611.3024 L 661.0766,604.5532 L 658.1095,598.0257 L 654.8251,612.7905 L 651.7455,604.8987 L 648.0427,600.0543 L 644.0307,613.7957 L 641.135,605.6004 L 637.934,595.9656 L 633.7799,613.4684 L 630.7107,604.0277 L 628.1984,596.2334 L 625.9024,605.9862 L 621.4151,603.4294 L 618.7163,598.9026 L 615.2255,611.773 L 611.4156,602.3619 L 607.9704,604.7757 L 604.2266,606.0648 L 600.4484,598.75 L 597.1275,615.7304 L 593.976,601.6655 L 591.3033,602.024 L 588.2945,616.9497 L 584.8649,600.5837 L 582.2137,604.1058 L 579.2472,620.4557 L 576.0319,600.3362 L 572.1633,610.2411 L 569.0618,604.7957 L 565.514,599.2135 L 562.9989,611.1039 L 560.4139,605.9597 L 557.7907,599.2126 L 553.2639,614.1486 L 549.6258,601.7424 L 546.1484,605.483 L 543.58,620.5117 L 539.5842,598.949 L 534.8844,616.2269 L 532.188,603.1775 L 529.2262,599.2385 L 526.225,612.3346 L 523.4049,605.2525 L 520.3763,595.5584 L 517.3338,610.4524 L 514.2421,604.946 L 511.2514,597.415 L 508.8778,609.338 L 504.9696,588.2021 L 502.1703,576.8079 L 499.4737,595.3535 L 495.8148,588.8824 L 492.5825,574.6166 L 489.1773,606.8681 L 486.2208,587.8014 L 483.9104,578.5007 L 481.419,585.0086 L 478.7215,612.7667 L 474.3093,581.1544 L 471.5425,579.9079 L 467.6613,616.7882 L 464.2553,584.8104 L 461.4745,572.1629 L 458.5584,607.7409 L 455.3571,587.1978 L 452.4033,572.3141 L 449.6977,602.7403 L 445.4988,584.0054 L 441.6458,584.3765 L 439.1801,613.1408 L 436.0414,586.2181 L 433.3223,576.3009 L 430.1642,597.4553 L 426.5142,589.9184 L 424.0545,580.6627 L 421.1016,581.7175 L 417.6851,615.2692 L 414.2939,584.8468 L 411.4007,574.3304 L 407.078,601.3367 L 404.1413,592.041 L 401.3108,580.0708 L 398.41,586.1594 L 395.6921,617.563 L 392.2687,583.184 L 389.3993,577.6379 L 386.3066,608.9014 L 382.9257,585.9016 L 379.8633,572.2924 L 376.1096,608.137 L 372.9526,589.0597 L 370.1894,578.0953 L 366.6408,600.4378 L 363.4311,590.4369 L 360.4296,578.0609 L 357.0373,598.1246 L 353.6779,590.4786 L 349.8648,576.0857 L 346.4711,592.9458 L 343.6741,619.998 L 340.4819,586.97 L 335.8684,593.7391 L 332.7395,590.5417 L 329.785,577.1541 L 326.9125,594.6005 L 322.8874,587.595 L 319.5375,573.6731 L 315.6465,617.8445 L 311.8588,580.2822 L 307.5545,603.0468 L 303.4716,585.8068 L 299.8463,581.5648 L 297.1539,614.2076 L 293.0874,581.825 L 288.3857,601.0951 L 285.6905,590.909 L 282.3091,576.3482 L 278.7308,604.4484 L 275.372,589.439 L 271.2531,577.8713 L 267.6354,598.9675 L 264.9514,591.3746 L 261.7909,577.5536 L 258.8556,598.6889 L 255.7633,589.7393 L 252.4034,573.2538 L 248.7306,619.663 L 245.7697,583.2145 L 243.3033,576.1119 L 239.9428,611.1723 L 236.5762,587.9382 L 234.0911,577.7037 L 230.5112,604.7387 L 226.7251,584.0723 L 223.3724,583.2679 L 220.8342,619.4997 L 218.0916,581.832 L 214.4873,602.8492 L 211.6729,587.3475 L 208.5323,578.2597 L 206.3025,606.6843 L 202.8453,582.1614 L 199.9554,590.5925 L 197.5494,593.7887 L 194.6185,577.947 L 191.4821,607.5562 L 188.0364,583.8715 L 184.9026,586.5778 L 182.1241,593.2973 L 179.9506,583.698 L 177.071,587.6229 L 173.8415,589.0092 L 169.1257,602.3924 L 166.1133,585.8849 L 163.0601,588.3762 L 159.8819,588.4141 L 157.3496,573.5345 L 153.8301,594.513 L 151.4082,579.8524 L 148.2812,607.2527 L 145.1565,580.6997 L 141.7456,600.3661 L 137.4734,578.0022 L 132.991,590.0922 L 129.9579,584.6102 L 125.4581,580.1994 L 122.3811,614.1243 L 119.5335,578.6971 L 116.4332,618.7878 L 113.4086,577.6041 L 110.7122,595.6536 L 107.9292,580.3165 L 103.9973,584.0961 L 100.7409,595.9589 L 96.41691,597.1769 L 93.56117,603.1516 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5a5ffc'>-<path d='M 90.0,630.0 L 93.56117,611.2375 L 96.41691,609.3307 L 100.7409,608.8348 L 103.9973,602.5806 L 107.9292,599.5984 L 110.7122,608.8871 L 113.4086,598.0644 L 116.4332,618.9616 L 119.5335,599.478 L 122.3811,616.5299 L 125.4581,600.4207 L 129.9579,601.4007 L 132.991,605.9733 L 137.4734,599.1395 L 141.7456,609.4073 L 145.1565,600.5939 L 148.2812,612.9118 L 151.4082,600.1512 L 153.8301,608.5421 L 157.3496,595.6911 L 159.8819,605.0138 L 163.0601,603.2726 L 166.1133,603.5938 L 169.1257,610.5123 L 173.8415,605.3347 L 177.071,602.9714 L 179.9506,602.4303 L 182.1241,607.9112 L 184.9026,602.2826 L 188.0364,602.5228 L 191.4821,613.0327 L 194.6185,599.0286 L 197.5494,608.1202 L 199.9554,604.358 L 202.8453,601.5137 L 206.3025,612.6258 L 208.5323,597.9726 L 211.6729,604.5197 L 214.4873,610.6163 L 218.0916,601.3623 L 220.8342,619.5491 L 223.3724,600.5253 L 226.7251,602.6443 L 230.5112,611.5023 L 234.0911,598.9707 L 236.5762,604.8039 L 239.9428,614.8156 L 243.3033,596.8475 L 245.7697,602.0842 L 248.7306,619.7452 L 252.4034,595.512 L 255.7633,605.891 L 258.8556,608.4752 L 261.7909,598.8395 L 264.9514,606.7501 L 267.6354,608.6404 L 271.2531,599.0626 L 275.372,605.677 L 278.7308,611.5161 L 282.3091,598.2341 L 285.6905,606.5733 L 288.3857,609.7293 L 293.0874,601.3734 L 297.1539,616.4306 L 299.8463,599.5802 L 303.4716,603.6584 L 307.5545,610.7921 L 311.8588,600.4072 L 315.6465,618.555 L 319.5375,595.5573 L 322.8874,604.6404 L 326.9125,606.4218 L 329.785,598.6543 L 332.7395,606.3276 L 335.8684,605.8235 L 340.4819,604.2866 L 343.6741,620.0109 L 346.4711,605.4847 L 349.8648,597.9629 L 353.6779,606.295 L 357.0373,608.2321 L 360.4296,599.1818 L 363.4311,606.2968 L 366.6408,609.4407 L 370.1894,599.1322 L 372.9526,605.4674 L 376.1096,613.3604 L 379.8633,594.7931 L 382.9257,603.6622 L 386.3066,613.6346 L 389.3993,597.6056 L 392.2687,602.1405 L 395.6921,618.4754 L 398.41,601.933 L 401.3108,600.3344 L 404.1413,607.1411 L 407.078,609.8124 L 411.4007,596.706 L 414.2939,602.9937 L 417.6851,617.1082 L 421.1016,599.7934 L 424.0545,600.7014 L 426.5142,606.0126 L 430.1642,607.7682 L 433.3223,598.1182 L 436.0414,603.9123 L 439.1801,615.7378 L 441.6458,601.0367 L 445.4988,602.5792 L 449.6977,610.438 L 452.4033,595.0784 L 455.3571,604.4592 L 458.5584,612.9831 L 461.4745,594.757 L 464.2553,603.09 L 467.6613,618.0395 L 471.5425,598.6748 L 474.3093,600.963 L 478.7215,615.5781 L 481.419,601.367 L 483.9104,599.4466 L 486.2208,604.7064 L 489.1773,612.6141 L 492.5825,596.95 L 495.8148,605.3441 L 499.4737,606.6887 L 502.1703,598.4772 L 504.9696,605.0215 L 508.8778,613.1833 L 511.2514,605.9548 L 514.2421,612.6097 L 517.3338,613.7623 L 520.3763,604.8333 L 523.4049,612.8668 L 526.225,614.8711 L 529.2262,607.0272 L 532.188,611.2504 L 534.8844,617.13 L 539.5842,608.0031 L 543.58,620.5164 L 546.1484,610.9031 L 549.6258,610.153 L 553.2639,616.0869 L 557.7907,608.2192 L 560.4139,613.395 L 562.9989,614.1425 L 565.514,606.9905 L 569.0618,612.4529 L 572.1633,613.5803 L 576.0319,609.0726 L 579.2472,620.4603 L 582.2137,610.0831 L 584.8649,609.2625 L 588.2945,617.7336 L 591.3033,608.7112 L 593.976,610.0843 L 597.1275,616.933 L 600.4484,606.7565 L 604.2266,613.4314 L 607.9704,610.4342 L 611.4156,610.6309 L 615.2255,614.5332 L 618.7163,606.9673 L 621.4151,611.4166 L 625.9024,611.0692 L 628.1984,605.2663 L 630.7107,611.8945 L 633.7799,615.6861 L 637.934,605.1242 L 641.135,613.0938 L 644.0307,615.8931 L 648.0427,607.556 L 651.7455,612.5542 L 654.8251,615.1926 L 658.1095,606.3294 L 661.0766,612.2644 L 664.3993,614.2487 L 667.6346,605.5775 L 670.3676,612.1672 L 674.1383,612.9684 L 677.4062,608.3383 L 680.3694,614.1248 L 683.8974,611.3605 L 686.7041,608.7875 L 690.0451,619.3221 L 692.8351,610.0411 L 695.2176,608.9989 L 698.3422,614.5646 L 701.6787,611.2328 L 705.0621,607.0481 L 707.6247,613.2999 L 710.665,613.5814 L 713.2368,607.1819 L 716.4565,612.5956 L 719.7726,613.2843 L 722.6103,607.0595 L 727.0604,613.619 L 730.1509,615.6418 L 733.6457,608.3912 L 736.2556,610.4272 L 739.6113,616.0945 L 742.3556,608.5565 L 745.2577,611.1811 L 748.5497,614.5667 L 752.0964,605.7049 L 757.1347,614.3955 L 760.1255,612.661 L 763.8369,608.8363 L 767.4715,616.6796 L 770.7028,607.3366 L 774.4631,614.3054 L 777.4632,613.4247 L 780.0684,605.909 L 783.3133,614.4645 L 786.1083,612.4218 L 789.3441,608.8768 L 792.9731,616.3693 L 796.4929,606.7013 L 800.5749,619.4196 L 804.9764,606.6136 L 808.6477,620.3089 L 811.8924,609.6756 L 815.0348,611.3235 L 818.7569,613.2165 L 822.6119,610.5065 L 825.4594,616.5956 L 828.4501,608.2975 L 832.227,614.7437 L 835.7178,610.8379 L 838.3943,609.5664 L 841.0206,620.0758 L 844.5857,607.1649 L 847.9327,619.5544 L 850.9386,609.3104 L 853.8989,612.8627 L 857.1536,611.0601 L 859.8448,610.7316 L 863.1617,617.3149 L 866.3971,610.5558 L 869.2519,610.7111 L 872.7499,614.5039 L 875.9817,607.0061 L 879.5555,618.5532 L 882.3518,610.2719 L 885.2014,611.2061 L 888.9416,612.2377 L 892.3162,611.8088 L 895.1255,615.515 L 897.9262,607.7896 L 900.4222,614.739 L 903.6589,609.4681 L 907.2527,617.2509 L 911.2496,608.905 L 914.1828,619.38 L 917.3226,611.0701 L 920.9951,617.2709 L 924.0882,611.0836 L 928.0172,615.0699 L 930.0,630.0 L 930.0,630.0 L 928.0172,614.3688 L 924.0882,609.6897 L 920.9951,616.8646 L 917.3226,609.6692 L 914.1828,619.3659 L 911.2496,607.0965 L 907.2527,616.881 L 903.6589,607.7982 L 900.4222,614.7038 L 897.9262,605.8802 L 895.1255,614.902 L 892.3162,610.813 L 888.9416,611.0974 L 885.2014,609.9918 L 882.3518,608.7488 L 879.5555,618.4123 L 875.9817,604.9827 L 872.7499,613.7241 L 869.2519,609.3688 L 866.3971,609.1337 L 863.1617,617.0566 L 859.8448,609.4176 L 857.1536,609.7355 L 853.8989,612.2908 L 850.9386,607.6933 L 847.9327,619.4945 L 844.5857,605.1603 L 841.0206,620.0558 L 838.3943,607.9188 L 835.7178,609.4757 L 832.227,614.7061 L 828.4501,606.5102 L 825.4594,616.2234 L 822.6119,609.21 L 818.7569,612.223 L 815.0348,610.2431 L 811.8924,608.1443 L 808.6477,620.3042 L 804.9764,604.5338 L 800.5749,619.348 L 796.4929,604.631 L 792.9731,615.9829 L 789.3441,607.0202 L 786.1083,611.3226 L 783.3133,614.36 L 780.0684,603.7552 L 777.4632,612.4781 L 774.4631,614.148 L 770.7028,605.4331 L 767.4715,616.3203 L 763.8369,607.002 L 760.1255,611.6194 L 757.1347,614.2429 L 752.0964,603.5183 L 748.5497,613.8715 L 745.2577,610.0972 L 742.3556,606.8255 L 739.6113,615.6682 L 736.2556,609.0791 L 733.6457,606.6485 L 730.1509,615.1016 L 727.0604,613.242 L 722.6103,605.0878 L 719.7726,612.359 L 716.4565,611.9215 L 713.2368,605.2372 L 710.665,612.7136 L 707.6247,612.8431 L 705.0621,604.9108 L 701.6787,609.9692 L 698.3422,614.5165 L 695.2176,607.2186 L 692.8351,608.5603 L 690.0451,619.2658 L 686.7041,606.9603 L 683.8974,610.1004 L 680.3694,613.9287 L 677.4062,606.3561 L 674.1383,611.9738 L 670.3676,611.3992 L 667.6346,603.3921 L 664.3993,613.5113 L 661.0766,611.5234 L 658.1095,604.2649 L 654.8251,614.589 L 651.7455,611.8707 L 648.0427,605.6911 L 644.0307,615.3705 L 641.135,612.583 L 637.934,602.8495 L 633.7799,615.1295 L 630.7107,611.0173 L 628.1984,603.0151 L 625.9024,609.7998 L 621.4151,610.4348 L 618.7163,604.9604 L 615.2255,613.8392 L 611.4156,609.3533 L 607.9704,609.0227 L 604.2266,613.058 L 600.4484,604.7637 L 597.1275,616.6288 L 593.976,608.6551 L 591.3033,607.0495 L 588.2945,617.5327 L 584.8649,607.5786 L 582.2137,608.5905 L 579.2472,620.4557 L 576.0319,607.324 L 572.1633,612.7477 L 569.0618,611.7941 L 565.514,605.0564 L 562.9989,613.3815 L 560.4139,612.9582 L 557.7907,606.2111 L 553.2639,615.6019 L 549.6258,608.7426 L 546.1484,609.5538 L 543.58,620.5117 L 539.5842,605.928 L 534.8844,616.8998 L 532.188,610.1688 L 529.2262,605.0884 L 526.225,614.2335 L 523.4049,612.2632 L 520.3763,602.5234 L 517.3338,612.9309 L 514.2421,611.9427 L 511.2514,603.8269 L 508.8778,612.2216 L 504.9696,602.2183 L 502.1703,590.8241 L 499.4737,602.2744 L 495.8148,602.8862 L 492.5825,588.6205 L 489.1773,610.3735 L 486.2208,601.8141 L 483.9104,592.5134 L 481.419,595.0103 L 478.7215,614.486 L 474.3093,595.1512 L 471.5425,591.3893 L 467.6613,617.558 L 464.2553,598.8178 L 461.4745,585.9906 L 458.5584,610.9433 L 455.3571,601.184 L 452.4033,586.3003 L 449.6977,607.4506 L 445.4988,597.9899 L 441.6458,594.5579 L 439.1801,614.7173 L 436.0414,600.2097 L 433.3223,590.2925 L 430.1642,603.7649 L 426.5142,603.9152 L 424.0545,594.6595 L 421.1016,592.7885 L 417.6851,616.3966 L 414.2939,598.833 L 411.4007,588.3166 L 407.078,606.5137 L 404.1413,606.0431 L 401.3108,594.0729 L 398.41,595.7912 L 395.6921,618.1196 L 392.2687,597.186 L 389.3993,589.8433 L 386.3066,611.7956 L 382.9257,599.8667 L 379.8633,586.0478 L 376.1096,611.3182 L 372.9526,603.0459 L 370.1894,592.0815 L 366.6408,605.9354 L 363.4311,604.4179 L 360.4296,592.0419 L 357.0373,604.3004 L 353.6779,604.449 L 349.8648,590.0561 L 346.4711,600.5995 L 343.6741,620.005 L 340.4819,600.9492 L 335.8684,601.125 L 332.7395,604.5121 L 329.785,591.1245 L 326.9125,601.8103 L 322.8874,601.5214 L 319.5375,587.0516 L 315.6465,618.2743 L 311.8588,594.2455 L 307.5545,607.787 L 303.4716,599.7561 L 299.8463,592.5777 L 297.1539,615.564 L 293.0874,595.7636 L 288.3857,606.3602 L 285.6905,604.86 L 282.3091,590.2992 L 278.7308,608.7623 L 275.372,603.3812 L 271.2531,591.8135 L 267.6354,604.865 L 264.9514,605.2939 L 261.7909,591.4729 L 258.8556,604.6621 L 255.7633,603.6446 L 252.4034,586.8843 L 248.7306,619.7123 L 245.7697,597.1496 L 243.3033,588.7928 L 239.9428,613.3865 L 236.5762,601.8258 L 234.0911,591.5913 L 230.5112,608.8589 L 226.7251,597.9458 L 223.3724,593.8175 L 220.8342,619.5279 L 218.0916,595.7126 L 214.4873,607.5947 L 211.6729,601.2457 L 208.5323,590.3242 L 206.3025,610.3183 L 202.8453,596.005 L 199.9554,599.0124 L 197.5494,607.634 L 194.6185,591.7924 L 191.4821,610.9084 L 188.0364,597.6939 L 184.9026,596.1867 L 182.1241,607.1514 L 179.9506,597.5521 L 177.071,597.0328 L 173.8415,602.8228 L 169.1257,607.351 L 166.1133,599.6985 L 163.0601,597.5043 L 159.8819,602.1907 L 157.3496,587.1138 L 153.8301,608.2861 L 151.4082,593.6255 L 148.2812,610.7087 L 145.1565,594.4146 L 141.7456,605.8866 L 137.4734,591.6732 L 132.991,603.735 L 129.9579,594.9008 L 125.4581,593.7153 L 122.3811,615.5986 L 119.5335,592.1761 L 116.4332,618.8935 L 113.4086,590.2129 L 110.7122,608.8577 L 107.9292,592.2612 L 103.9973,597.14 L 100.7409,608.661 L 96.41691,609.2097 L 93.56117,608.2194 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#c808c2'>-<path d='M 90.0,630.0 L 93.56117,613.7919 L 96.41691,611.9036 L 100.7409,611.3831 L 103.9973,605.1207 L 107.9292,602.1488 L 110.7122,611.4374 L 113.4086,600.7443 L 116.4332,621.6147 L 119.5335,602.0099 L 122.3811,619.1768 L 125.4581,602.967 L 129.9579,604.1525 L 132.991,608.538 L 137.4734,601.7022 L 141.7456,612.1981 L 145.1565,603.1402 L 148.2812,615.7354 L 151.4082,602.718 L 153.8301,611.0986 L 157.3496,598.449 L 159.8819,607.5703 L 163.0601,605.9873 L 166.1133,606.1441 L 169.1257,613.0524 L 173.8415,607.883 L 177.071,605.5238 L 179.9506,604.9683 L 182.1241,610.4821 L 184.9026,605.0303 L 188.0364,605.0238 L 191.4821,615.7557 L 194.6185,601.5974 L 197.5494,610.7117 L 199.9554,607.0994 L 202.8453,604.0846 L 206.3025,615.3529 L 208.5323,600.7901 L 211.6729,607.0516 L 214.4873,613.3474 L 218.0916,603.8879 L 220.8342,622.272 L 223.3724,603.3181 L 226.7251,605.1721 L 230.5112,614.3095 L 234.0911,601.5396 L 236.5762,607.3584 L 239.9428,617.5818 L 243.3033,599.6671 L 245.7697,604.6653 L 248.7306,622.3181 L 252.4034,598.0912 L 255.7633,608.4455 L 258.8556,611.1303 L 261.7909,601.3878 L 264.9514,609.2984 L 267.6354,611.273 L 271.2531,601.6027 L 275.372,608.2459 L 278.7308,614.0253 L 282.3091,600.7865 L 285.6905,609.1483 L 288.3857,612.3763 L 293.0874,603.9217 L 297.1539,619.2112 L 299.8463,602.4285 L 303.4716,606.1882 L 307.5545,613.3486 L 311.8588,602.9658 L 315.6465,621.3869 L 319.5375,598.3131 L 322.8874,607.1907 L 326.9125,608.9866 L 329.785,601.1964 L 332.7395,608.8903 L 335.8684,608.6883 L 340.4819,606.837 L 343.6741,622.5571 L 346.4711,608.1604 L 349.8648,600.5584 L 353.6779,608.8413 L 357.0373,610.8235 L 360.4296,601.7445 L 363.4311,608.8903 L 366.6408,612.0096 L 370.1894,601.7093 L 372.9526,608.0075 L 376.1096,615.8963 L 379.8633,597.5695 L 382.9257,606.1899 L 386.3066,616.3637 L 389.3993,600.3409 L 392.2687,604.6806 L 395.6921,621.071 L 398.41,604.7299 L 401.3108,602.8745 L 404.1413,609.6997 L 407.078,612.4203 L 411.4007,599.2338 L 414.2939,605.5358 L 417.6851,619.71 L 421.1016,602.3745 L 424.0545,603.2374 L 426.5142,608.5958 L 430.1642,610.5487 L 433.3223,600.6808 L 436.0414,606.4627 L 439.1801,618.508 L 441.6458,603.7843 L 445.4988,605.1254 L 449.6977,613.2761 L 452.4033,597.6288 L 455.3571,607.024 L 458.5584,615.8027 L 461.4745,597.4881 L 464.2553,605.6485 L 467.6613,620.6083 L 471.5425,601.5211 L 474.3093,603.5031 L 478.7215,618.3463 L 481.419,604.1454 L 483.9104,601.999 L 486.2208,607.2568 L 489.1773,615.3247 L 492.5825,599.5189 L 495.8148,607.9027 L 499.4737,609.4384 L 502.1703,601.0358 L 504.9696,607.5615 L 508.8778,615.7912 L 511.2514,608.7353 L 514.2421,615.195 L 517.3338,616.5551 L 520.3763,607.6898 L 523.4049,615.4234 L 526.225,617.7174 L 529.2262,609.9125 L 532.188,613.7884 L 534.8844,620.0317 L 539.5842,610.5575 L 543.58,623.0873 L 546.1484,613.4308 L 549.6258,612.7095 L 553.2639,618.6434 L 557.7907,610.7407 L 560.4139,615.9371 L 562.9989,616.96 L 565.514,609.9149 L 569.0618,614.995 L 572.1633,616.4717 L 576.0319,611.6332 L 579.2472,623.0497 L 582.2137,612.6478 L 584.8649,611.8191 L 588.2945,620.4052 L 591.3033,611.5534 L 593.976,612.647 L 597.1275,619.6991 L 600.4484,609.6131 L 604.2266,616.0167 L 607.9704,613.1428 L 611.4156,613.1484 L 615.2255,617.3795 L 618.7163,609.567 L 621.4151,613.9648 L 625.9024,613.9505 L 628.1984,608.1208 L 630.7107,614.4572 L 633.7799,618.257 L 637.934,607.9253 L 641.135,615.6339 L 644.0307,618.4373 L 648.0427,610.3981 L 651.7455,615.0881 L 654.8251,617.9731 L 658.1095,609.1818 L 661.0766,614.8189 L 664.3993,617.1115 L 667.6346,608.4669 L 670.3676,614.7094 L 674.1383,615.6071 L 677.4062,610.862 L 680.3694,616.6629 L 683.8974,614.0608 L 686.7041,611.3358 L 690.0451,622.2033 L 692.8351,612.799 L 695.2176,611.5493 L 698.3422,617.115 L 701.6787,614.0071 L 705.0621,609.6128 L 707.6247,615.8769 L 710.665,616.403 L 713.2368,609.9912 L 716.4565,615.15 L 719.7726,616.0607 L 722.6103,609.7969 L 727.0604,616.1735 L 730.1509,618.3709 L 733.6457,611.1635 L 736.2556,612.9858 L 739.6113,618.8914 L 742.3556,611.2897 L 745.2577,613.7253 L 748.5497,617.4397 L 752.0964,608.5923 L 757.1347,616.9377 L 760.1255,615.4148 L 763.8369,611.3887 L 767.4715,619.4642 L 770.7028,610.1542 L 774.4631,616.866 L 777.4632,616.0017 L 780.0684,608.7635 L 783.3133,617.0621 L 786.1083,615.1078 L 789.3441,611.4168 L 792.9731,619.2895 L 796.4929,609.377 L 800.5749,622.0912 L 804.9764,609.3468 L 808.6477,622.853 L 811.8924,612.489 L 815.0348,613.8923 L 818.7569,615.7812 L 822.6119,613.063 L 825.4594,619.4296 L 828.4501,611.1027 L 832.227,617.2632 L 835.7178,613.6184 L 838.3943,612.1167 L 841.0206,622.6549 L 844.5857,609.8221 L 847.9327,622.0903 L 850.9386,612.1341 L 853.8989,615.4193 L 857.1536,613.8859 L 859.8448,613.2799 L 863.1617,620.1653 L 866.3971,613.3589 L 869.2519,613.2758 L 872.7499,617.2063 L 875.9817,609.8256 L 879.5555,621.2659 L 882.3518,612.8531 L 885.2014,613.7276 L 888.9416,615.0717 L 892.3162,614.3756 L 895.1255,618.2338 L 897.9262,610.6339 L 900.4222,617.2853 L 903.6589,612.2034 L 907.2527,619.7971 L 911.2496,611.5005 L 914.1828,622.1749 L 917.3226,613.8753 L 920.9951,619.8027 L 924.0882,613.8189 L 928.0172,617.7189 L 930.0,630.0 L 930.0,630.0 L 928.0172,615.0699 L 924.0882,611.0836 L 920.9951,617.2709 L 917.3226,611.0701 L 914.1828,619.38 L 911.2496,608.905 L 907.2527,617.2509 L 903.6589,609.4681 L 900.4222,614.739 L 897.9262,607.7896 L 895.1255,615.515 L 892.3162,611.8088 L 888.9416,612.2377 L 885.2014,611.2061 L 882.3518,610.2719 L 879.5555,618.5532 L 875.9817,607.0061 L 872.7499,614.5039 L 869.2519,610.7111 L 866.3971,610.5558 L 863.1617,617.3149 L 859.8448,610.7316 L 857.1536,611.0601 L 853.8989,612.8627 L 850.9386,609.3104 L 847.9327,619.5544 L 844.5857,607.1649 L 841.0206,620.0758 L 838.3943,609.5664 L 835.7178,610.8379 L 832.227,614.7437 L 828.4501,608.2975 L 825.4594,616.5956 L 822.6119,610.5065 L 818.7569,613.2165 L 815.0348,611.3235 L 811.8924,609.6756 L 808.6477,620.3089 L 804.9764,606.6136 L 800.5749,619.4196 L 796.4929,606.7013 L 792.9731,616.3693 L 789.3441,608.8768 L 786.1083,612.4218 L 783.3133,614.4645 L 780.0684,605.909 L 777.4632,613.4247 L 774.4631,614.3054 L 770.7028,607.3366 L 767.4715,616.6796 L 763.8369,608.8363 L 760.1255,612.661 L 757.1347,614.3955 L 752.0964,605.7049 L 748.5497,614.5667 L 745.2577,611.1811 L 742.3556,608.5565 L 739.6113,616.0945 L 736.2556,610.4272 L 733.6457,608.3912 L 730.1509,615.6418 L 727.0604,613.619 L 722.6103,607.0595 L 719.7726,613.2843 L 716.4565,612.5956 L 713.2368,607.1819 L 710.665,613.5814 L 707.6247,613.2999 L 705.0621,607.0481 L 701.6787,611.2328 L 698.3422,614.5646 L 695.2176,608.9989 L 692.8351,610.0411 L 690.0451,619.3221 L 686.7041,608.7875 L 683.8974,611.3605 L 680.3694,614.1248 L 677.4062,608.3383 L 674.1383,612.9684 L 670.3676,612.1672 L 667.6346,605.5775 L 664.3993,614.2487 L 661.0766,612.2644 L 658.1095,606.3294 L 654.8251,615.1926 L 651.7455,612.5542 L 648.0427,607.556 L 644.0307,615.8931 L 641.135,613.0938 L 637.934,605.1242 L 633.7799,615.6861 L 630.7107,611.8945 L 628.1984,605.2663 L 625.9024,611.0692 L 621.4151,611.4166 L 618.7163,606.9673 L 615.2255,614.5332 L 611.4156,610.6309 L 607.9704,610.4342 L 604.2266,613.4314 L 600.4484,606.7565 L 597.1275,616.933 L 593.976,610.0843 L 591.3033,608.7112 L 588.2945,617.7336 L 584.8649,609.2625 L 582.2137,610.0831 L 579.2472,620.4603 L 576.0319,609.0726 L 572.1633,613.5803 L 569.0618,612.4529 L 565.514,606.9905 L 562.9989,614.1425 L 560.4139,613.395 L 557.7907,608.2192 L 553.2639,616.0869 L 549.6258,610.153 L 546.1484,610.9031 L 543.58,620.5164 L 539.5842,608.0031 L 534.8844,617.13 L 532.188,611.2504 L 529.2262,607.0272 L 526.225,614.8711 L 523.4049,612.8668 L 520.3763,604.8333 L 517.3338,613.7623 L 514.2421,612.6097 L 511.2514,605.9548 L 508.8778,613.1833 L 504.9696,605.0215 L 502.1703,598.4772 L 499.4737,606.6887 L 495.8148,605.3441 L 492.5825,596.95 L 489.1773,612.6141 L 486.2208,604.7064 L 483.9104,599.4466 L 481.419,601.367 L 478.7215,615.5781 L 474.3093,600.963 L 471.5425,598.6748 L 467.6613,618.0395 L 464.2553,603.09 L 461.4745,594.757 L 458.5584,612.9831 L 455.3571,604.4592 L 452.4033,595.0784 L 449.6977,610.438 L 445.4988,602.5792 L 441.6458,601.0367 L 439.1801,615.7378 L 436.0414,603.9123 L 433.3223,598.1182 L 430.1642,607.7682 L 426.5142,606.0126 L 424.0545,600.7014 L 421.1016,599.7934 L 417.6851,617.1082 L 414.2939,602.9937 L 411.4007,596.706 L 407.078,609.8124 L 404.1413,607.1411 L 401.3108,600.3344 L 398.41,601.933 L 395.6921,618.4754 L 392.2687,602.1405 L 389.3993,597.6056 L 386.3066,613.6346 L 382.9257,603.6622 L 379.8633,594.7931 L 376.1096,613.3604 L 372.9526,605.4674 L 370.1894,599.1322 L 366.6408,609.4407 L 363.4311,606.2968 L 360.4296,599.1818 L 357.0373,608.2321 L 353.6779,606.295 L 349.8648,597.9629 L 346.4711,605.4847 L 343.6741,620.0109 L 340.4819,604.2866 L 335.8684,605.8235 L 332.7395,606.3276 L 329.785,598.6543 L 326.9125,606.4218 L 322.8874,604.6404 L 319.5375,595.5573 L 315.6465,618.555 L 311.8588,600.4072 L 307.5545,610.7921 L 303.4716,603.6584 L 299.8463,599.5802 L 297.1539,616.4306 L 293.0874,601.3734 L 288.3857,609.7293 L 285.6905,606.5733 L 282.3091,598.2341 L 278.7308,611.5161 L 275.372,605.677 L 271.2531,599.0626 L 267.6354,608.6404 L 264.9514,606.7501 L 261.7909,598.8395 L 258.8556,608.4752 L 255.7633,605.891 L 252.4034,595.512 L 248.7306,619.7452 L 245.7697,602.0842 L 243.3033,596.8475 L 239.9428,614.8156 L 236.5762,604.8039 L 234.0911,598.9707 L 230.5112,611.5023 L 226.7251,602.6443 L 223.3724,600.5253 L 220.8342,619.5491 L 218.0916,601.3623 L 214.4873,610.6163 L 211.6729,604.5197 L 208.5323,597.9726 L 206.3025,612.6258 L 202.8453,601.5137 L 199.9554,604.358 L 197.5494,608.1202 L 194.6185,599.0286 L 191.4821,613.0327 L 188.0364,602.5228 L 184.9026,602.2826 L 182.1241,607.9112 L 179.9506,602.4303 L 177.071,602.9714 L 173.8415,605.3347 L 169.1257,610.5123 L 166.1133,603.5938 L 163.0601,603.2726 L 159.8819,605.0138 L 157.3496,595.6911 L 153.8301,608.5421 L 151.4082,600.1512 L 148.2812,612.9118 L 145.1565,600.5939 L 141.7456,609.4073 L 137.4734,599.1395 L 132.991,605.9733 L 129.9579,601.4007 L 125.4581,600.4207 L 122.3811,616.5299 L 119.5335,599.478 L 116.4332,618.9616 L 113.4086,598.0644 L 110.7122,608.8871 L 107.9292,599.5984 L 103.9973,602.5806 L 100.7409,608.8348 L 96.41691,609.3307 L 93.56117,611.2375 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#a23338'>-<path d='M 90.0,630.0 L 93.56117,615.3632 L 96.41691,616.2163 L 100.7409,615.8708 L 103.9973,608.6032 L 107.9292,605.3194 L 110.7122,616.046 L 113.4086,604.1316 L 116.4332,622.4056 L 119.5335,605.4166 L 122.3811,620.1955 L 125.4581,606.4682 L 129.9579,607.1675 L 132.991,612.9024 L 137.4734,605.1776 L 141.7456,614.1163 L 145.1565,606.8834 L 148.2812,617.1769 L 151.4082,606.4013 L 153.8301,615.8094 L 157.3496,602.3549 L 159.8819,611.8731 L 163.0601,608.8269 L 166.1133,610.276 L 169.1257,614.9025 L 173.8415,612.2662 L 177.071,608.4578 L 179.9506,608.954 L 182.1241,615.1107 L 184.9026,608.0236 L 188.0364,609.0089 L 191.4821,617.2336 L 194.6185,605.2349 L 197.5494,615.4471 L 199.9554,609.8139 L 202.8453,607.9881 L 206.3025,616.8971 L 208.5323,604.4164 L 211.6729,611.3255 L 214.4873,615.1677 L 218.0916,607.7849 L 220.8342,622.8093 L 223.3724,606.5945 L 226.7251,609.2106 L 230.5112,616.014 L 234.0911,605.1706 L 236.5762,611.701 L 239.9428,618.8354 L 243.3033,603.4684 L 245.7697,608.7309 L 248.7306,622.836 L 252.4034,602.1262 L 255.7633,612.8663 L 258.8556,613.2981 L 261.7909,605.0288 L 264.9514,613.8506 L 267.6354,613.4285 L 271.2531,605.3012 L 275.372,612.7154 L 278.7308,615.7991 L 282.3091,604.3682 L 285.6905,613.673 L 288.3857,614.3791 L 293.0874,607.8451 L 297.1539,620.2375 L 299.8463,605.8652 L 303.4716,610.387 L 307.5545,615.2311 L 311.8588,606.8323 L 315.6465,622.0674 L 319.5375,602.3352 L 322.8874,611.5082 L 326.9125,611.492 L 329.785,604.862 L 332.7395,613.4349 L 335.8684,611.2378 L 340.4819,611.165 L 343.6741,623.001 L 346.4711,610.7898 L 349.8648,604.1707 L 353.6779,613.3806 L 357.0373,613.063 L 360.4296,605.4677 L 363.4311,613.3991 L 366.6408,614.0893 L 370.1894,605.4612 L 372.9526,612.4558 L 376.1096,617.4218 L 379.8633,601.7008 L 382.9257,610.4351 L 386.3066,617.8346 L 389.3993,604.1005 L 392.2687,608.752 L 395.6921,621.8114 L 398.41,607.8531 L 401.3108,606.7504 L 404.1413,614.3512 L 407.078,614.4443 L 411.4007,603.0545 L 414.2939,609.7305 L 417.6851,620.6841 L 421.1016,605.8605 L 424.0545,607.1173 L 426.5142,613.0594 L 430.1642,612.8486 L 433.3223,604.3066 L 436.0414,610.6767 L 439.1801,619.6929 L 441.6458,607.0466 L 445.4988,609.252 L 449.6977,615.1832 L 452.4033,601.7618 L 455.3571,611.3091 L 458.5584,617.3487 L 461.4745,601.6594 L 464.2553,609.7892 L 467.6613,621.4286 L 471.5425,605.121 L 474.3093,607.44 L 478.7215,619.5605 L 481.419,607.3777 L 483.9104,605.7774 L 486.2208,611.6558 L 489.1773,616.9441 L 492.5825,603.2215 L 495.8148,612.3311 L 499.4737,611.9057 L 502.1703,604.7144 L 504.9696,611.9641 L 508.8778,617.5269 L 511.2514,611.6482 L 514.2421,617.4127 L 517.3338,618.1551 L 520.3763,610.7654 L 523.4049,617.6194 L 526.225,619.1231 L 529.2262,612.6282 L 532.188,616.0337 L 534.8844,621.0769 L 539.5842,612.841 L 543.58,623.3016 L 546.1484,615.5616 L 549.6258,614.9601 L 553.2639,619.9034 L 557.7907,613.0283 L 560.4139,618.1308 L 562.9989,618.4978 L 565.514,612.6129 L 569.0618,617.2304 L 572.1633,618.0864 L 576.0319,613.902 L 579.2472,623.2852 L 582.2137,614.8996 L 584.8649,614.0967 L 588.2945,621.3528 L 591.3033,613.983 L 593.976,614.8976 L 597.1275,620.7701 L 600.4484,612.3645 L 604.2266,618.2462 L 607.9704,615.2942 L 611.4156,615.3896 L 615.2255,618.8363 L 618.7163,612.3343 L 621.4151,616.2002 L 625.9024,615.9732 L 628.1984,611.0966 L 630.7107,616.6825 L 633.7799,619.5723 L 637.934,610.9439 L 641.135,617.8516 L 644.0307,619.7261 L 648.0427,613.011 L 651.7455,617.3123 L 654.8251,619.3271 L 658.1095,611.9973 L 661.0766,617.0078 L 664.3993,618.6005 L 667.6346,611.3992 L 670.3676,616.9377 L 674.1383,617.3522 L 677.4062,613.1396 L 680.3694,618.8765 L 683.8974,616.0637 L 686.7041,613.6187 L 690.0451,622.669 L 692.8351,615.0021 L 695.2176,613.804 L 698.3422,619.2757 L 701.6787,616.0176 L 705.0621,612.1816 L 707.6247,618.08 L 710.665,618.0042 L 713.2368,612.6417 L 716.4565,617.3672 L 719.7726,617.7159 L 722.6103,612.4902 L 727.0604,618.3513 L 730.1509,619.6451 L 733.6457,613.6343 L 736.2556,615.2135 L 739.6113,620.0634 L 742.3556,613.7312 L 745.2577,615.9183 L 748.5497,618.8665 L 752.0964,611.4841 L 757.1347,619.0914 L 760.1255,617.1734 L 763.8369,613.6393 L 767.4715,620.5599 L 770.7028,612.7976 L 774.4631,619.0462 L 777.4632,617.6569 L 780.0684,611.6177 L 783.3133,619.2393 L 786.1083,616.9121 L 789.3441,613.6369 L 792.9731,620.3963 L 796.4929,612.1097 L 800.5749,622.5885 L 804.9764,612.0941 L 808.6477,623.1648 L 811.8924,614.7138 L 815.0348,616.103 L 818.7569,617.4776 L 822.6119,615.2672 L 825.4594,620.5064 L 828.4501,613.54 L 832.227,619.4305 L 835.7178,615.6389 L 838.3943,614.3163 L 841.0206,623.0189 L 844.5857,612.4685 L 847.9327,622.6117 L 850.9386,614.3947 L 853.8989,617.597 L 857.1536,615.8488 L 859.8448,615.4336 L 863.1617,621.1053 L 866.3971,615.3911 L 869.2519,615.4096 L 872.7499,618.6002 L 875.9817,612.4268 L 879.5555,621.9741 L 882.3518,614.9745 L 885.2014,615.8356 L 888.9416,616.8167 L 892.3162,616.4747 L 895.1255,619.4434 L 897.9262,613.0841 L 900.4222,619.439 L 903.6589,614.3694 L 907.2527,620.7313 L 911.2496,613.7505 L 914.1828,622.7468 L 917.3226,615.7213 L 920.9951,620.6764 L 924.0882,615.6697 L 928.0172,618.8691 L 930.0,630.0 L 930.0,630.0 L 928.0172,617.7189 L 924.0882,613.8189 L 920.9951,619.8027 L 917.3226,613.8753 L 914.1828,622.1749 L 911.2496,611.5005 L 907.2527,619.7971 L 903.6589,612.2034 L 900.4222,617.2853 L 897.9262,610.6339 L 895.1255,618.2338 L 892.3162,614.3756 L 888.9416,615.0717 L 885.2014,613.7276 L 882.3518,612.8531 L 879.5555,621.2659 L 875.9817,609.8256 L 872.7499,617.2063 L 869.2519,613.2758 L 866.3971,613.3589 L 863.1617,620.1653 L 859.8448,613.2799 L 857.1536,613.8859 L 853.8989,615.4193 L 850.9386,612.1341 L 847.9327,622.0903 L 844.5857,609.8221 L 841.0206,622.6549 L 838.3943,612.1167 L 835.7178,613.6184 L 832.227,617.2632 L 828.4501,611.1027 L 825.4594,619.4296 L 822.6119,613.063 L 818.7569,615.7812 L 815.0348,613.8923 L 811.8924,612.489 L 808.6477,622.853 L 804.9764,609.3468 L 800.5749,622.0912 L 796.4929,609.377 L 792.9731,619.2895 L 789.3441,611.4168 L 786.1083,615.1078 L 783.3133,617.0621 L 780.0684,608.7635 L 777.4632,616.0017 L 774.4631,616.866 L 770.7028,610.1542 L 767.4715,619.4642 L 763.8369,611.3887 L 760.1255,615.4148 L 757.1347,616.9377 L 752.0964,608.5923 L 748.5497,617.4397 L 745.2577,613.7253 L 742.3556,611.2897 L 739.6113,618.8914 L 736.2556,612.9858 L 733.6457,611.1635 L 730.1509,618.3709 L 727.0604,616.1735 L 722.6103,609.7969 L 719.7726,616.0607 L 716.4565,615.15 L 713.2368,609.9912 L 710.665,616.403 L 707.6247,615.8769 L 705.0621,609.6128 L 701.6787,614.0071 L 698.3422,617.115 L 695.2176,611.5493 L 692.8351,612.799 L 690.0451,622.2033 L 686.7041,611.3358 L 683.8974,614.0608 L 680.3694,616.6629 L 677.4062,610.862 L 674.1383,615.6071 L 670.3676,614.7094 L 667.6346,608.4669 L 664.3993,617.1115 L 661.0766,614.8189 L 658.1095,609.1818 L 654.8251,617.9731 L 651.7455,615.0881 L 648.0427,610.3981 L 644.0307,618.4373 L 641.135,615.6339 L 637.934,607.9253 L 633.7799,618.257 L 630.7107,614.4572 L 628.1984,608.1208 L 625.9024,613.9505 L 621.4151,613.9648 L 618.7163,609.567 L 615.2255,617.3795 L 611.4156,613.1484 L 607.9704,613.1428 L 604.2266,616.0167 L 600.4484,609.6131 L 597.1275,619.6991 L 593.976,612.647 L 591.3033,611.5534 L 588.2945,620.4052 L 584.8649,611.8191 L 582.2137,612.6478 L 579.2472,623.0497 L 576.0319,611.6332 L 572.1633,616.4717 L 569.0618,614.995 L 565.514,609.9149 L 562.9989,616.96 L 560.4139,615.9371 L 557.7907,610.7407 L 553.2639,618.6434 L 549.6258,612.7095 L 546.1484,613.4308 L 543.58,623.0873 L 539.5842,610.5575 L 534.8844,620.0317 L 532.188,613.7884 L 529.2262,609.9125 L 526.225,617.7174 L 523.4049,615.4234 L 520.3763,607.6898 L 517.3338,616.5551 L 514.2421,615.195 L 511.2514,608.7353 L 508.8778,615.7912 L 504.9696,607.5615 L 502.1703,601.0358 L 499.4737,609.4384 L 495.8148,607.9027 L 492.5825,599.5189 L 489.1773,615.3247 L 486.2208,607.2568 L 483.9104,601.999 L 481.419,604.1454 L 478.7215,618.3463 L 474.3093,603.5031 L 471.5425,601.5211 L 467.6613,620.6083 L 464.2553,605.6485 L 461.4745,597.4881 L 458.5584,615.8027 L 455.3571,607.024 L 452.4033,597.6288 L 449.6977,613.2761 L 445.4988,605.1254 L 441.6458,603.7843 L 439.1801,618.508 L 436.0414,606.4627 L 433.3223,600.6808 L 430.1642,610.5487 L 426.5142,608.5958 L 424.0545,603.2374 L 421.1016,602.3745 L 417.6851,619.71 L 414.2939,605.5358 L 411.4007,599.2338 L 407.078,612.4203 L 404.1413,609.6997 L 401.3108,602.8745 L 398.41,604.7299 L 395.6921,621.071 L 392.2687,604.6806 L 389.3993,600.3409 L 386.3066,616.3637 L 382.9257,606.1899 L 379.8633,597.5695 L 376.1096,615.8963 L 372.9526,608.0075 L 370.1894,601.7093 L 366.6408,612.0096 L 363.4311,608.8903 L 360.4296,601.7445 L 357.0373,610.8235 L 353.6779,608.8413 L 349.8648,600.5584 L 346.4711,608.1604 L 343.6741,622.5571 L 340.4819,606.837 L 335.8684,608.6883 L 332.7395,608.8903 L 329.785,601.1964 L 326.9125,608.9866 L 322.8874,607.1907 L 319.5375,598.3131 L 315.6465,621.3869 L 311.8588,602.9658 L 307.5545,613.3486 L 303.4716,606.1882 L 299.8463,602.4285 L 297.1539,619.2112 L 293.0874,603.9217 L 288.3857,612.3763 L 285.6905,609.1483 L 282.3091,600.7865 L 278.7308,614.0253 L 275.372,608.2459 L 271.2531,601.6027 L 267.6354,611.273 L 264.9514,609.2984 L 261.7909,601.3878 L 258.8556,611.1303 L 255.7633,608.4455 L 252.4034,598.0912 L 248.7306,622.3181 L 245.7697,604.6653 L 243.3033,599.6671 L 239.9428,617.5818 L 236.5762,607.3584 L 234.0911,601.5396 L 230.5112,614.3095 L 226.7251,605.1721 L 223.3724,603.3181 L 220.8342,622.272 L 218.0916,603.8879 L 214.4873,613.3474 L 211.6729,607.0516 L 208.5323,600.7901 L 206.3025,615.3529 L 202.8453,604.0846 L 199.9554,607.0994 L 197.5494,610.7117 L 194.6185,601.5974 L 191.4821,615.7557 L 188.0364,605.0238 L 184.9026,605.0303 L 182.1241,610.4821 L 179.9506,604.9683 L 177.071,605.5238 L 173.8415,607.883 L 169.1257,613.0524 L 166.1133,606.1441 L 163.0601,605.9873 L 159.8819,607.5703 L 157.3496,598.449 L 153.8301,611.0986 L 151.4082,602.718 L 148.2812,615.7354 L 145.1565,603.1402 L 141.7456,612.1981 L 137.4734,601.7022 L 132.991,608.538 L 129.9579,604.1525 L 125.4581,602.967 L 122.3811,619.1768 L 119.5335,602.0099 L 116.4332,621.6147 L 113.4086,600.7443 L 110.7122,611.4374 L 107.9292,602.1488 L 103.9973,605.1207 L 100.7409,611.3831 L 96.41691,611.9036 L 93.56117,613.7919 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#188b19'>-<path d='M 90.0,630.0 L 93.56117,617.7682 L 96.41691,618.6213 L 100.7409,618.2758 L 103.9973,611.0094 L 107.9292,607.7245 L 110.7122,618.4511 L 113.4086,606.546 L 116.4332,624.8153 L 119.5335,607.8216 L 122.3811,622.61 L 125.4581,608.8733 L 129.9579,609.5902 L 132.991,615.3074 L 137.4734,607.5827 L 141.7456,616.5355 L 145.1565,609.2884 L 148.2812,619.5949 L 151.4082,608.8063 L 153.8301,618.2144 L 157.3496,604.7751 L 159.8819,614.2781 L 163.0601,611.2448 L 166.1133,612.681 L 169.1257,617.3076 L 173.8415,614.6712 L 177.071,610.8629 L 179.9506,611.359 L 182.1241,617.5157 L 184.9026,610.4427 L 188.0364,611.4139 L 191.4821,619.6527 L 194.6185,607.6399 L 197.5494,617.8522 L 199.9554,612.2295 L 202.8453,610.3931 L 206.3025,619.3139 L 208.5323,606.8402 L 211.6729,613.7306 L 214.4873,617.5868 L 218.0916,610.19 L 220.8342,625.2237 L 223.3724,609.0159 L 226.7251,611.6156 L 230.5112,618.4367 L 234.0911,607.5756 L 236.5762,614.1061 L 239.9428,621.2557 L 243.3033,605.891 L 245.7697,611.1359 L 248.7306,625.2422 L 252.4034,604.5312 L 255.7633,615.2713 L 258.8556,615.7125 L 261.7909,607.4338 L 264.9514,616.2557 L 267.6354,615.8394 L 271.2531,607.7063 L 275.372,615.1204 L 278.7308,618.2042 L 282.3091,606.7733 L 285.6905,616.078 L 288.3857,616.79 L 293.0874,610.2502 L 297.1539,622.659 L 299.8463,608.2902 L 303.4716,612.792 L 307.5545,617.6361 L 311.8588,609.2373 L 315.6465,624.4865 L 319.5375,604.7555 L 322.8874,613.9132 L 326.9125,613.897 L 329.785,607.2671 L 332.7395,615.84 L 335.8684,613.6639 L 340.4819,613.5712 L 343.6741,625.406 L 346.4711,613.2042 L 349.8648,606.5757 L 353.6779,615.7856 L 357.0373,615.4692 L 360.4296,607.8727 L 363.4311,615.8041 L 366.6408,616.4943 L 370.1894,607.8663 L 372.9526,614.8609 L 376.1096,619.8268 L 379.8633,604.1222 L 382.9257,612.8401 L 386.3066,620.2513 L 389.3993,606.5184 L 392.2687,611.157 L 395.6921,624.2164 L 398.41,610.2733 L 401.3108,609.1554 L 404.1413,616.7562 L 407.078,616.8587 L 411.4007,605.4607 L 414.2939,612.1355 L 417.6851,623.0926 L 421.1016,608.2655 L 424.0545,609.5224 L 426.5142,615.4645 L 430.1642,615.2666 L 433.3223,606.7116 L 436.0414,613.0818 L 439.1801,622.112 L 441.6458,609.4645 L 445.4988,611.657 L 449.6977,617.6047 L 452.4033,604.1668 L 455.3571,613.7141 L 458.5584,619.7713 L 461.4745,604.0761 L 464.2553,612.1943 L 467.6613,623.8336 L 471.5425,607.546 L 474.3093,609.845 L 478.7215,621.9785 L 481.419,609.7969 L 483.9104,608.1825 L 486.2208,614.0608 L 489.1773,619.3597 L 492.5825,605.6265 L 495.8148,614.7361 L 499.4737,614.3248 L 502.1703,607.1194 L 504.9696,614.3691 L 508.8778,619.9342 L 511.2514,614.0673 L 514.2421,619.8177 L 517.3338,620.5778 L 520.3763,613.1916 L 523.4049,620.0244 L 526.225,621.5457 L 529.2262,615.0543 L 532.188,618.4387 L 534.8844,623.5019 L 539.5842,615.246 L 543.58,625.7078 L 546.1484,617.9667 L 549.6258,617.3651 L 553.2639,622.3084 L 557.7907,615.4333 L 560.4139,620.5358 L 562.9989,620.918 L 565.514,615.0402 L 569.0618,619.6354 L 572.1633,620.5126 L 576.0319,616.307 L 579.2472,625.6914 L 582.2137,617.3046 L 584.8649,616.5017 L 588.2945,623.7684 L 591.3033,616.4057 L 593.976,617.3026 L 597.1275,623.1915 L 600.4484,614.7907 L 604.2266,620.6512 L 607.9704,617.711 L 611.4156,617.7946 L 615.2255,621.2601 L 618.7163,614.7417 L 621.4151,618.6052 L 625.9024,618.3959 L 628.1984,613.5215 L 630.7107,619.0876 L 633.7799,621.9785 L 637.934,613.3654 L 641.135,620.2566 L 644.0307,622.1311 L 648.0427,615.4348 L 651.7455,619.7173 L 654.8251,621.7451 L 658.1095,614.4234 L 661.0766,619.4128 L 664.3993,621.0255 L 667.6346,613.8254 L 670.3676,619.3427 L 674.1383,619.7643 L 677.4062,615.5446 L 680.3694,621.2815 L 683.8974,618.4793 L 686.7041,616.0237 L 690.0451,625.094 L 692.8351,617.4188 L 695.2176,616.209 L 698.3422,621.6808 L 701.6787,618.4379 L 705.0621,614.5878 L 707.6247,620.485 L 710.665,620.4281 L 713.2368,615.0643 L 716.4565,619.7722 L 719.7726,620.1374 L 722.6103,614.907 L 727.0604,620.7563 L 730.1509,622.0642 L 733.6457,616.0569 L 736.2556,617.6185 L 739.6113,622.4861 L 742.3556,616.1479 L 745.2577,618.3234 L 748.5497,621.2927 L 752.0964,613.9091 L 757.1347,621.4964 L 760.1255,619.5913 L 763.8369,616.0443 L 767.4715,622.9778 L 770.7028,615.2202 L 774.4631,621.4512 L 777.4632,620.0631 L 780.0684,614.0415 L 783.3133,621.6444 L 786.1083,619.3277 L 789.3441,616.0419 L 792.9731,622.8225 L 796.4929,614.5218 L 800.5749,625.0029 L 804.9764,614.5109 L 808.6477,625.5698 L 811.8924,617.1388 L 815.0348,618.508 L 818.7569,619.8826 L 822.6119,617.6722 L 825.4594,622.9291 L 828.4501,615.9638 L 832.227,621.8367 L 835.7178,618.0603 L 838.3943,616.7213 L 841.0206,625.4275 L 844.5857,614.8829 L 847.9327,625.0179 L 850.9386,616.8185 L 853.8989,620.0021 L 857.1536,618.2714 L 859.8448,617.8387 L 863.1617,623.5292 L 866.3971,617.8137 L 869.2519,617.8146 L 872.7499,621.0182 L 875.9817,614.8494 L 879.5555,624.3908 L 882.3518,617.3807 L 885.2014,618.2406 L 888.9416,619.2393 L 892.3162,618.8797 L 895.1255,621.8613 L 897.9262,615.5056 L 900.4222,621.844 L 903.6589,616.7862 L 907.2527,623.1363 L 911.2496,616.1579 L 914.1828,625.1682 L 917.3226,618.144 L 920.9951,623.0814 L 924.0882,618.0864 L 928.0172,621.2824 L 930.0,630.0 L 930.0,630.0 L 928.0172,618.8691 L 924.0882,615.6697 L 920.9951,620.6764 L 917.3226,615.7213 L 914.1828,622.7468 L 911.2496,613.7505 L 907.2527,620.7313 L 903.6589,614.3694 L 900.4222,619.439 L 897.9262,613.0841 L 895.1255,619.4434 L 892.3162,616.4747 L 888.9416,616.8167 L 885.2014,615.8356 L 882.3518,614.9745 L 879.5555,621.9741 L 875.9817,612.4268 L 872.7499,618.6002 L 869.2519,615.4096 L 866.3971,615.3911 L 863.1617,621.1053 L 859.8448,615.4336 L 857.1536,615.8488 L 853.8989,617.597 L 850.9386,614.3947 L 847.9327,622.6117 L 844.5857,612.4685 L 841.0206,623.0189 L 838.3943,614.3163 L 835.7178,615.6389 L 832.227,619.4305 L 828.4501,613.54 L 825.4594,620.5064 L 822.6119,615.2672 L 818.7569,617.4776 L 815.0348,616.103 L 811.8924,614.7138 L 808.6477,623.1648 L 804.9764,612.0941 L 800.5749,622.5885 L 796.4929,612.1097 L 792.9731,620.3963 L 789.3441,613.6369 L 786.1083,616.9121 L 783.3133,619.2393 L 780.0684,611.6177 L 777.4632,617.6569 L 774.4631,619.0462 L 770.7028,612.7976 L 767.4715,620.5599 L 763.8369,613.6393 L 760.1255,617.1734 L 757.1347,619.0914 L 752.0964,611.4841 L 748.5497,618.8665 L 745.2577,615.9183 L 742.3556,613.7312 L 739.6113,620.0634 L 736.2556,615.2135 L 733.6457,613.6343 L 730.1509,619.6451 L 727.0604,618.3513 L 722.6103,612.4902 L 719.7726,617.7159 L 716.4565,617.3672 L 713.2368,612.6417 L 710.665,618.0042 L 707.6247,618.08 L 705.0621,612.1816 L 701.6787,616.0176 L 698.3422,619.2757 L 695.2176,613.804 L 692.8351,615.0021 L 690.0451,622.669 L 686.7041,613.6187 L 683.8974,616.0637 L 680.3694,618.8765 L 677.4062,613.1396 L 674.1383,617.3522 L 670.3676,616.9377 L 667.6346,611.3992 L 664.3993,618.6005 L 661.0766,617.0078 L 658.1095,611.9973 L 654.8251,619.3271 L 651.7455,617.3123 L 648.0427,613.011 L 644.0307,619.7261 L 641.135,617.8516 L 637.934,610.9439 L 633.7799,619.5723 L 630.7107,616.6825 L 628.1984,611.0966 L 625.9024,615.9732 L 621.4151,616.2002 L 618.7163,612.3343 L 615.2255,618.8363 L 611.4156,615.3896 L 607.9704,615.2942 L 604.2266,618.2462 L 600.4484,612.3645 L 597.1275,620.7701 L 593.976,614.8976 L 591.3033,613.983 L 588.2945,621.3528 L 584.8649,614.0967 L 582.2137,614.8996 L 579.2472,623.2852 L 576.0319,613.902 L 572.1633,618.0864 L 569.0618,617.2304 L 565.514,612.6129 L 562.9989,618.4978 L 560.4139,618.1308 L 557.7907,613.0283 L 553.2639,619.9034 L 549.6258,614.9601 L 546.1484,615.5616 L 543.58,623.3016 L 539.5842,612.841 L 534.8844,621.0769 L 532.188,616.0337 L 529.2262,612.6282 L 526.225,619.1231 L 523.4049,617.6194 L 520.3763,610.7654 L 517.3338,618.1551 L 514.2421,617.4127 L 511.2514,611.6482 L 508.8778,617.5269 L 504.9696,611.9641 L 502.1703,604.7144 L 499.4737,611.9057 L 495.8148,612.3311 L 492.5825,603.2215 L 489.1773,616.9441 L 486.2208,611.6558 L 483.9104,605.7774 L 481.419,607.3777 L 478.7215,619.5605 L 474.3093,607.44 L 471.5425,605.121 L 467.6613,621.4286 L 464.2553,609.7892 L 461.4745,601.6594 L 458.5584,617.3487 L 455.3571,611.3091 L 452.4033,601.7618 L 449.6977,615.1832 L 445.4988,609.252 L 441.6458,607.0466 L 439.1801,619.6929 L 436.0414,610.6767 L 433.3223,604.3066 L 430.1642,612.8486 L 426.5142,613.0594 L 424.0545,607.1173 L 421.1016,605.8605 L 417.6851,620.6841 L 414.2939,609.7305 L 411.4007,603.0545 L 407.078,614.4443 L 404.1413,614.3512 L 401.3108,606.7504 L 398.41,607.8531 L 395.6921,621.8114 L 392.2687,608.752 L 389.3993,604.1005 L 386.3066,617.8346 L 382.9257,610.4351 L 379.8633,601.7008 L 376.1096,617.4218 L 372.9526,612.4558 L 370.1894,605.4612 L 366.6408,614.0893 L 363.4311,613.3991 L 360.4296,605.4677 L 357.0373,613.063 L 353.6779,613.3806 L 349.8648,604.1707 L 346.4711,610.7898 L 343.6741,623.001 L 340.4819,611.165 L 335.8684,611.2378 L 332.7395,613.4349 L 329.785,604.862 L 326.9125,611.492 L 322.8874,611.5082 L 319.5375,602.3352 L 315.6465,622.0674 L 311.8588,606.8323 L 307.5545,615.2311 L 303.4716,610.387 L 299.8463,605.8652 L 297.1539,620.2375 L 293.0874,607.8451 L 288.3857,614.3791 L 285.6905,613.673 L 282.3091,604.3682 L 278.7308,615.7991 L 275.372,612.7154 L 271.2531,605.3012 L 267.6354,613.4285 L 264.9514,613.8506 L 261.7909,605.0288 L 258.8556,613.2981 L 255.7633,612.8663 L 252.4034,602.1262 L 248.7306,622.836 L 245.7697,608.7309 L 243.3033,603.4684 L 239.9428,618.8354 L 236.5762,611.701 L 234.0911,605.1706 L 230.5112,616.014 L 226.7251,609.2106 L 223.3724,606.5945 L 220.8342,622.8093 L 218.0916,607.7849 L 214.4873,615.1677 L 211.6729,611.3255 L 208.5323,604.4164 L 206.3025,616.8971 L 202.8453,607.9881 L 199.9554,609.8139 L 197.5494,615.4471 L 194.6185,605.2349 L 191.4821,617.2336 L 188.0364,609.0089 L 184.9026,608.0236 L 182.1241,615.1107 L 179.9506,608.954 L 177.071,608.4578 L 173.8415,612.2662 L 169.1257,614.9025 L 166.1133,610.276 L 163.0601,608.8269 L 159.8819,611.8731 L 157.3496,602.3549 L 153.8301,615.8094 L 151.4082,606.4013 L 148.2812,617.1769 L 145.1565,606.8834 L 141.7456,614.1163 L 137.4734,605.1776 L 132.991,612.9024 L 129.9579,607.1675 L 125.4581,606.4682 L 122.3811,620.1955 L 119.5335,605.4166 L 116.4332,622.4056 L 113.4086,604.1316 L 110.7122,616.046 L 107.9292,605.3194 L 103.9973,608.6032 L 100.7409,615.8708 L 96.41691,616.2163 L 93.56117,615.3632 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5e65cd'>-<path d='M 90.0,630.0 L 93.56117,618.9 L 96.41691,618.6575 L 100.7409,618.3331 L 103.9973,613.1223 L 107.9292,611.4254 L 110.7122,618.4669 L 113.4086,610.5693 L 116.4332,624.9351 L 119.5335,611.0716 L 122.3811,623.695 L 125.4581,611.9004 L 129.9579,613.3774 L 132.991,616.2877 L 137.4734,611.0669 L 141.7456,619.0341 L 145.1565,612.1235 L 148.2812,621.551 L 151.4082,611.8211 L 153.8301,618.3325 L 157.3496,609.7188 L 159.8819,615.6098 L 163.0601,614.929 L 166.1133,614.4672 L 169.1257,619.7833 L 173.8415,615.8356 L 177.071,614.6633 L 179.9506,613.7106 L 182.1241,617.8874 L 184.9026,614.3356 L 188.0364,613.7144 L 191.4821,621.6802 L 194.6185,611.0695 L 197.5494,618.09 L 199.9554,615.7648 L 202.8453,613.053 L 206.3025,621.4303 L 208.5323,611.472 L 211.6729,615.2745 L 214.4873,620.0396 L 218.0916,612.9106 L 220.8342,625.2792 L 223.3724,613.1898 L 226.7251,613.8245 L 230.5112,620.7636 L 234.0911,611.1462 L 236.5762,615.5743 L 239.9428,622.9854 L 243.3033,610.8162 L 245.7697,613.5315 L 248.7306,625.3241 L 252.4034,609.7417 L 255.7633,616.3449 L 258.8556,618.604 L 261.7909,610.9788 L 264.9514,616.9655 L 267.6354,618.6991 L 271.2531,611.2134 L 275.372,616.2204 L 278.7308,620.6271 L 282.3091,610.638 L 285.6905,616.9218 L 288.3857,619.471 L 293.0874,612.9549 L 297.1539,623.9704 L 299.8463,612.7318 L 303.4716,614.6777 L 307.5545,620.1929 L 311.8588,612.2539 L 315.6465,624.9974 L 319.5375,609.9439 L 322.8874,615.4263 L 326.9125,617.2201 L 329.785,610.9037 L 332.7395,616.726 L 335.8684,617.0522 L 340.4819,615.227 L 343.6741,625.4298 L 346.4711,616.6972 L 349.8648,610.4457 L 353.6779,616.684 L 357.0373,618.4575 L 360.4296,611.4028 L 363.4311,616.7219 L 366.6408,619.259 L 370.1894,611.3047 L 372.9526,616.0314 L 376.1096,621.9379 L 379.8633,609.5133 L 382.9257,614.7214 L 386.3066,622.3237 L 389.3993,611.4444 L 392.2687,613.6214 L 395.6921,624.9316 L 398.41,614.3697 L 401.3108,612.1896 L 404.1413,617.2856 L 407.078,619.604 L 411.4007,610.0238 L 414.2939,614.2344 L 417.6851,624.3406 L 421.1016,612.9044 L 424.0545,612.5407 L 426.5142,616.5407 L 430.1642,618.3659 L 433.3223,610.5781 L 436.0414,614.9093 L 439.1801,623.789 L 441.6458,613.7696 L 445.4988,613.9152 L 449.6977,620.2258 L 452.4033,609.5535 L 455.3571,615.3867 L 458.5584,621.93 L 461.4745,609.6081 L 464.2553,614.3362 L 467.6613,624.754 L 471.5425,612.2721 L 474.3093,612.6907 L 478.7215,623.7047 L 481.419,614.0588 L 483.9104,611.5857 L 486.2208,615.5088 L 489.1773,621.6083 L 492.5825,609.9616 L 495.8148,615.9524 L 499.4737,617.6073 L 502.1703,610.8996 L 504.9696,615.751 L 508.8778,621.9926 L 511.2514,617.4467 L 514.2421,620.5795 L 517.3338,622.4731 L 520.3763,616.7903 L 523.4049,620.6973 L 526.225,623.2139 L 529.2262,618.1405 L 532.188,619.6489 L 534.8844,624.7569 L 539.5842,617.5959 L 543.58,625.7158 L 546.1484,620.483 L 549.6258,618.991 L 553.2639,623.7934 L 557.7907,617.7083 L 560.4139,621.0537 L 562.9989,622.7262 L 565.514,618.1537 L 569.0618,620.3726 L 572.1633,622.4097 L 576.0319,618.3248 L 579.2472,625.6976 L 582.2137,619.9522 L 584.8649,618.3926 L 588.2945,624.8958 L 591.3033,619.291 L 593.976,618.9751 L 597.1275,624.4422 L 600.4484,617.9068 L 604.2266,621.0669 L 607.9704,620.2237 L 611.4156,619.2681 L 615.2255,622.9987 L 618.7163,617.9502 L 621.4151,619.6991 L 625.9024,620.7105 L 628.1984,616.9256 L 630.7107,620.0705 L 633.7799,623.5339 L 637.934,616.8232 L 641.135,620.8608 L 644.0307,623.6416 L 648.0427,618.4302 L 651.7455,620.5144 L 654.8251,623.3524 L 658.1095,617.6928 L 661.0766,620.254 L 664.3993,622.7958 L 667.6346,617.1995 L 670.3676,620.2446 L 674.1383,621.7671 L 677.4062,617.7209 L 680.3694,621.507 L 683.8974,620.8018 L 686.7041,618.0759 L 690.0451,625.4577 L 692.8351,619.9862 L 695.2176,618.2241 L 698.3422,621.7239 L 701.6787,620.7542 L 705.0621,617.3093 L 707.6247,621.0046 L 710.665,622.2776 L 713.2368,618.1082 L 716.4565,620.5191 L 719.7726,622.0759 L 722.6103,618.0133 L 727.0604,621.1843 L 730.1509,623.5571 L 733.6457,618.8929 L 736.2556,619.0955 L 739.6113,623.8847 L 742.3556,619.0042 L 745.2577,619.5705 L 748.5497,622.9749 L 752.0964,617.2136 L 757.1347,621.6673 L 760.1255,621.6021 L 763.8369,618.0955 L 767.4715,624.2672 L 770.7028,618.2209 L 774.4631,621.6344 L 777.4632,621.9937 L 780.0684,617.2668 L 783.3133,621.7571 L 786.1083,621.4239 L 789.3441,618.0351 L 792.9731,624.0961 L 796.4929,617.5868 L 800.5749,625.3729 L 804.9764,617.5424 L 808.6477,625.6077 L 811.8924,619.6462 L 815.0348,619.6847 L 818.7569,621.7674 L 822.6119,619.077 L 825.4594,624.1516 L 828.4501,618.6625 L 832.227,621.8772 L 835.7178,620.374 L 838.3943,618.5532 L 841.0206,625.5006 L 844.5857,617.6986 L 847.9327,625.3288 L 850.9386,619.281 L 853.8989,620.5886 L 857.1536,620.394 L 859.8448,619.1924 L 863.1617,624.557 L 866.3971,619.9742 L 869.2519,619.1331 L 872.7499,622.5172 L 875.9817,617.5956 L 879.5555,624.9721 L 882.3518,619.646 L 885.2014,619.456 L 888.9416,621.0422 L 892.3162,619.7983 L 895.1255,623.1305 L 897.9262,617.888 L 900.4222,621.8854 L 903.6589,618.7687 L 907.2527,624.0391 L 911.2496,618.0198 L 914.1828,625.2193 L 917.3226,619.5831 L 920.9951,623.7658 L 924.0882,618.9434 L 928.0172,621.6444 L 930.0,630.0 L 930.0,630.0 L 928.0172,621.2824 L 924.0882,618.0864 L 920.9951,623.0814 L 917.3226,618.144 L 914.1828,625.1682 L 911.2496,616.1579 L 907.2527,623.1363 L 903.6589,616.7862 L 900.4222,621.844 L 897.9262,615.5056 L 895.1255,621.8613 L 892.3162,618.8797 L 888.9416,619.2393 L 885.2014,618.2406 L 882.3518,617.3807 L 879.5555,624.3908 L 875.9817,614.8494 L 872.7499,621.0182 L 869.2519,617.8146 L 866.3971,617.8137 L 863.1617,623.5292 L 859.8448,617.8387 L 857.1536,618.2714 L 853.8989,620.0021 L 850.9386,616.8185 L 847.9327,625.0179 L 844.5857,614.8829 L 841.0206,625.4275 L 838.3943,616.7213 L 835.7178,618.0603 L 832.227,621.8367 L 828.4501,615.9638 L 825.4594,622.9291 L 822.6119,617.6722 L 818.7569,619.8826 L 815.0348,618.508 L 811.8924,617.1388 L 808.6477,625.5698 L 804.9764,614.5109 L 800.5749,625.0029 L 796.4929,614.5218 L 792.9731,622.8225 L 789.3441,616.0419 L 786.1083,619.3277 L 783.3133,621.6444 L 780.0684,614.0415 L 777.4632,620.0631 L 774.4631,621.4512 L 770.7028,615.2202 L 767.4715,622.9778 L 763.8369,616.0443 L 760.1255,619.5913 L 757.1347,621.4964 L 752.0964,613.9091 L 748.5497,621.2927 L 745.2577,618.3234 L 742.3556,616.1479 L 739.6113,622.4861 L 736.2556,617.6185 L 733.6457,616.0569 L 730.1509,622.0642 L 727.0604,620.7563 L 722.6103,614.907 L 719.7726,620.1374 L 716.4565,619.7722 L 713.2368,615.0643 L 710.665,620.4281 L 707.6247,620.485 L 705.0621,614.5878 L 701.6787,618.4379 L 698.3422,621.6808 L 695.2176,616.209 L 692.8351,617.4188 L 690.0451,625.094 L 686.7041,616.0237 L 683.8974,618.4793 L 680.3694,621.2815 L 677.4062,615.5446 L 674.1383,619.7643 L 670.3676,619.3427 L 667.6346,613.8254 L 664.3993,621.0255 L 661.0766,619.4128 L 658.1095,614.4234 L 654.8251,621.7451 L 651.7455,619.7173 L 648.0427,615.4348 L 644.0307,622.1311 L 641.135,620.2566 L 637.934,613.3654 L 633.7799,621.9785 L 630.7107,619.0876 L 628.1984,613.5215 L 625.9024,618.3959 L 621.4151,618.6052 L 618.7163,614.7417 L 615.2255,621.2601 L 611.4156,617.7946 L 607.9704,617.711 L 604.2266,620.6512 L 600.4484,614.7907 L 597.1275,623.1915 L 593.976,617.3026 L 591.3033,616.4057 L 588.2945,623.7684 L 584.8649,616.5017 L 582.2137,617.3046 L 579.2472,625.6914 L 576.0319,616.307 L 572.1633,620.5126 L 569.0618,619.6354 L 565.514,615.0402 L 562.9989,620.918 L 560.4139,620.5358 L 557.7907,615.4333 L 553.2639,622.3084 L 549.6258,617.3651 L 546.1484,617.9667 L 543.58,625.7078 L 539.5842,615.246 L 534.8844,623.5019 L 532.188,618.4387 L 529.2262,615.0543 L 526.225,621.5457 L 523.4049,620.0244 L 520.3763,613.1916 L 517.3338,620.5778 L 514.2421,619.8177 L 511.2514,614.0673 L 508.8778,619.9342 L 504.9696,614.3691 L 502.1703,607.1194 L 499.4737,614.3248 L 495.8148,614.7361 L 492.5825,605.6265 L 489.1773,619.3597 L 486.2208,614.0608 L 483.9104,608.1825 L 481.419,609.7969 L 478.7215,621.9785 L 474.3093,609.845 L 471.5425,607.546 L 467.6613,623.8336 L 464.2553,612.1943 L 461.4745,604.0761 L 458.5584,619.7713 L 455.3571,613.7141 L 452.4033,604.1668 L 449.6977,617.6047 L 445.4988,611.657 L 441.6458,609.4645 L 439.1801,622.112 L 436.0414,613.0818 L 433.3223,606.7116 L 430.1642,615.2666 L 426.5142,615.4645 L 424.0545,609.5224 L 421.1016,608.2655 L 417.6851,623.0926 L 414.2939,612.1355 L 411.4007,605.4607 L 407.078,616.8587 L 404.1413,616.7562 L 401.3108,609.1554 L 398.41,610.2733 L 395.6921,624.2164 L 392.2687,611.157 L 389.3993,606.5184 L 386.3066,620.2513 L 382.9257,612.8401 L 379.8633,604.1222 L 376.1096,619.8268 L 372.9526,614.8609 L 370.1894,607.8663 L 366.6408,616.4943 L 363.4311,615.8041 L 360.4296,607.8727 L 357.0373,615.4692 L 353.6779,615.7856 L 349.8648,606.5757 L 346.4711,613.2042 L 343.6741,625.406 L 340.4819,613.5712 L 335.8684,613.6639 L 332.7395,615.84 L 329.785,607.2671 L 326.9125,613.897 L 322.8874,613.9132 L 319.5375,604.7555 L 315.6465,624.4865 L 311.8588,609.2373 L 307.5545,617.6361 L 303.4716,612.792 L 299.8463,608.2902 L 297.1539,622.659 L 293.0874,610.2502 L 288.3857,616.79 L 285.6905,616.078 L 282.3091,606.7733 L 278.7308,618.2042 L 275.372,615.1204 L 271.2531,607.7063 L 267.6354,615.8394 L 264.9514,616.2557 L 261.7909,607.4338 L 258.8556,615.7125 L 255.7633,615.2713 L 252.4034,604.5312 L 248.7306,625.2422 L 245.7697,611.1359 L 243.3033,605.891 L 239.9428,621.2557 L 236.5762,614.1061 L 234.0911,607.5756 L 230.5112,618.4367 L 226.7251,611.6156 L 223.3724,609.0159 L 220.8342,625.2237 L 218.0916,610.19 L 214.4873,617.5868 L 211.6729,613.7306 L 208.5323,606.8402 L 206.3025,619.3139 L 202.8453,610.3931 L 199.9554,612.2295 L 197.5494,617.8522 L 194.6185,607.6399 L 191.4821,619.6527 L 188.0364,611.4139 L 184.9026,610.4427 L 182.1241,617.5157 L 179.9506,611.359 L 177.071,610.8629 L 173.8415,614.6712 L 169.1257,617.3076 L 166.1133,612.681 L 163.0601,611.2448 L 159.8819,614.2781 L 157.3496,604.7751 L 153.8301,618.2144 L 151.4082,608.8063 L 148.2812,619.5949 L 145.1565,609.2884 L 141.7456,616.5355 L 137.4734,607.5827 L 132.991,615.3074 L 129.9579,609.5902 L 125.4581,608.8733 L 122.3811,622.61 L 119.5335,607.8216 L 116.4332,624.8153 L 113.4086,606.546 L 110.7122,618.4511 L 107.9292,607.7245 L 103.9973,611.0094 L 100.7409,618.2758 L 96.41691,618.6213 L 93.56117,617.7682 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#53cb86'>-<path d='M 90.0,630.0 L 93.56117,620.7833 L 96.41691,618.7385 L 100.7409,618.4364 L 103.9973,616.5058 L 107.9292,615.9348 L 110.7122,618.4939 L 113.4086,615.3811 L 116.4332,624.9777 L 119.5335,615.5434 L 122.3811,624.247 L 125.4581,615.9768 L 129.9579,617.3231 L 132.991,617.6575 L 137.4734,615.5983 L 141.7456,621.1567 L 145.1565,615.8746 L 148.2812,622.8736 L 151.4082,615.7674 L 153.8301,618.4931 L 157.3496,614.8814 L 159.8819,617.3058 L 163.0601,618.3947 L 166.1133,616.8135 L 169.1257,621.6858 L 173.8415,617.3584 L 177.071,618.2332 L 179.9506,616.645 L 182.1241,618.3454 L 184.9026,618.0084 L 188.0364,616.6326 L 191.4821,622.9543 L 194.6185,615.4313 L 197.5494,618.3853 L 199.9554,618.9825 L 202.8453,616.381 L 206.3025,622.8043 L 208.5323,616.0872 L 211.6729,617.2518 L 214.4873,621.8525 L 218.0916,616.3018 L 220.8342,625.2953 L 223.3724,617.2515 L 226.7251,616.6767 L 230.5112,622.3578 L 234.0911,615.6016 L 236.5762,617.3683 L 239.9428,623.8515 L 243.3033,615.6529 L 245.7697,616.4958 L 248.7306,625.3476 L 252.4034,614.9351 L 255.7633,617.7027 L 258.8556,620.8969 L 261.7909,615.4096 L 264.9514,617.8337 L 267.6354,620.9715 L 271.2531,615.5804 L 275.372,617.6123 L 278.7308,622.2756 L 282.3091,615.3896 L 285.6905,617.9449 L 288.3857,621.4982 L 293.0874,616.327 L 297.1539,624.4945 L 299.8463,616.9462 L 303.4716,617.0204 L 307.5545,621.9867 L 311.8588,615.933 L 315.6465,625.1706 L 319.5375,615.0743 L 322.8874,617.314 L 326.9125,619.9915 L 329.785,615.4454 L 332.7395,617.8243 L 335.8684,619.8588 L 340.4819,617.2277 L 343.6741,625.4407 L 346.4711,619.6228 L 349.8648,615.1979 L 353.6779,617.797 L 357.0373,620.8121 L 360.4296,615.6832 L 363.4311,617.8554 L 366.6408,621.3669 L 370.1894,615.5431 L 372.9526,617.4999 L 376.1096,623.1651 L 379.8633,614.7801 L 382.9257,617.0069 L 386.3066,623.4173 L 389.3993,616.0889 L 392.2687,616.5909 L 395.6921,625.1459 L 398.41,618.0644 L 401.3108,615.9682 L 404.1413,617.9511 L 407.078,621.5768 L 411.4007,615.0455 L 414.2939,616.7186 L 417.6851,624.7619 L 421.1016,617.0836 L 424.0545,616.1605 L 426.5142,617.7973 L 430.1642,620.7542 L 433.3223,615.251 L 436.0414,617.132 L 439.1801,624.4084 L 441.6458,617.6522 L 445.4988,616.6781 L 449.6977,622.0034 L 452.4033,614.8001 L 455.3571,617.339 L 458.5584,623.1513 L 461.4745,614.8441 L 464.2553,616.8892 L 467.6613,625.0388 L 471.5425,616.6391 L 474.3093,616.1829 L 478.7215,624.355 L 481.419,617.8592 L 483.9104,615.7489 L 486.2208,617.2445 L 489.1773,622.9514 L 492.5825,614.9604 L 495.8148,617.4297 L 499.4737,620.2525 L 502.1703,615.4824 L 504.9696,617.435 L 508.8778,623.1918 L 511.2514,620.1054 L 514.2421,621.4163 L 517.3338,623.5095 L 520.3763,619.6777 L 523.4049,621.4565 L 526.225,624.008 L 529.2262,620.564 L 532.188,621.0041 L 534.8844,625.0432 L 539.5842,620.1926 L 543.58,625.7187 L 546.1484,622.1725 L 549.6258,620.7572 L 553.2639,624.4026 L 557.7907,620.2214 L 560.4139,621.6044 L 562.9989,623.676 L 565.514,620.5728 L 569.0618,621.1849 L 572.1633,623.4534 L 576.0319,620.5135 L 579.2472,625.7005 L 582.2137,621.8135 L 584.8649,620.5038 L 588.2945,625.1439 L 591.3033,621.3637 L 593.976,620.7645 L 597.1275,624.8195 L 600.4484,620.3949 L 604.2266,621.5401 L 607.9704,621.9852 L 611.4156,620.8681 L 615.2255,623.8647 L 618.7163,620.4574 L 621.4151,620.9268 L 625.9024,622.2958 L 628.1984,619.7396 L 630.7107,621.1685 L 633.7799,624.2267 L 637.934,619.6665 L 641.135,621.5055 L 644.0307,624.2978 L 648.0427,620.7642 L 651.7455,621.3734 L 654.8251,624.1055 L 658.1095,620.2733 L 661.0766,621.1779 L 664.3993,623.7176 L 667.6346,619.9313 L 670.3676,621.2125 L 674.1383,623.0075 L 677.4062,620.2017 L 680.3694,621.755 L 683.8974,622.3739 L 686.7041,620.3643 L 690.0451,625.5282 L 692.8351,621.8343 L 695.2176,620.4542 L 698.3422,621.77 L 701.6787,622.3308 L 705.0621,619.9839 L 707.6247,621.5804 L 710.665,623.3595 L 713.2368,620.5361 L 716.4565,621.3649 L 719.7726,623.2297 L 722.6103,620.475 L 727.0604,621.6585 L 730.1509,624.2294 L 733.6457,621.0669 L 736.2556,620.7853 L 739.6113,624.4175 L 742.3556,621.1649 L 745.2577,620.9318 L 748.5497,623.8409 L 752.0964,619.9439 L 757.1347,621.8596 L 760.1255,622.8997 L 763.8369,620.3914 L 767.4715,624.7135 L 770.7028,620.6004 L 774.4631,621.834 L 777.4632,623.1754 L 780.0684,619.9589 L 783.3133,621.8907 L 786.1083,622.7949 L 789.3441,620.3573 L 792.9731,624.5819 L 796.4929,620.1718 L 800.5749,625.4595 L 804.9764,620.1392 L 808.6477,625.6151 L 811.8924,621.5604 L 815.0348,621.0381 L 818.7569,623.0107 L 822.6119,620.682 L 825.4594,624.6139 L 828.4501,620.8966 L 832.227,621.9271 L 835.7178,622.0739 L 838.3943,620.6157 L 841.0206,625.5226 L 844.5857,620.2014 L 847.9327,625.4007 L 850.9386,621.3023 L 853.8989,621.2924 L 857.1536,622.0483 L 859.8448,620.8364 L 863.1617,624.8829 L 866.3971,621.7548 L 869.2519,620.8138 L 872.7499,623.4889 L 875.9817,620.1218 L 879.5555,625.1474 L 882.3518,621.5469 L 885.2014,620.9768 L 888.9416,622.4705 L 892.3162,621.0496 L 895.1255,623.8938 L 897.9262,620.2748 L 900.4222,621.9341 L 903.6589,620.8546 L 907.2527,624.5044 L 911.2496,620.2774 L 914.1828,625.2325 L 917.3226,621.3343 L 920.9951,624.2707 L 924.0882,620.6858 L 928.0172,622.5134 L 930.0,630.0 L 930.0,630.0 L 928.0172,621.6444 L 924.0882,618.9434 L 920.9951,623.7658 L 917.3226,619.5831 L 914.1828,625.2193 L 911.2496,618.0198 L 907.2527,624.0391 L 903.6589,618.7687 L 900.4222,621.8854 L 897.9262,617.888 L 895.1255,623.1305 L 892.3162,619.7983 L 888.9416,621.0422 L 885.2014,619.456 L 882.3518,619.646 L 879.5555,624.9721 L 875.9817,617.5956 L 872.7499,622.5172 L 869.2519,619.1331 L 866.3971,619.9742 L 863.1617,624.557 L 859.8448,619.1924 L 857.1536,620.394 L 853.8989,620.5886 L 850.9386,619.281 L 847.9327,625.3288 L 844.5857,617.6986 L 841.0206,625.5006 L 838.3943,618.5532 L 835.7178,620.374 L 832.227,621.8772 L 828.4501,618.6625 L 825.4594,624.1516 L 822.6119,619.077 L 818.7569,621.7674 L 815.0348,619.6847 L 811.8924,619.6462 L 808.6477,625.6077 L 804.9764,617.5424 L 800.5749,625.3729 L 796.4929,617.5868 L 792.9731,624.0961 L 789.3441,618.0351 L 786.1083,621.4239 L 783.3133,621.7571 L 780.0684,617.2668 L 777.4632,621.9937 L 774.4631,621.6344 L 770.7028,618.2209 L 767.4715,624.2672 L 763.8369,618.0955 L 760.1255,621.6021 L 757.1347,621.6673 L 752.0964,617.2136 L 748.5497,622.9749 L 745.2577,619.5705 L 742.3556,619.0042 L 739.6113,623.8847 L 736.2556,619.0955 L 733.6457,618.8929 L 730.1509,623.5571 L 727.0604,621.1843 L 722.6103,618.0133 L 719.7726,622.0759 L 716.4565,620.5191 L 713.2368,618.1082 L 710.665,622.2776 L 707.6247,621.0046 L 705.0621,617.3093 L 701.6787,620.7542 L 698.3422,621.7239 L 695.2176,618.2241 L 692.8351,619.9862 L 690.0451,625.4577 L 686.7041,618.0759 L 683.8974,620.8018 L 680.3694,621.507 L 677.4062,617.7209 L 674.1383,621.7671 L 670.3676,620.2446 L 667.6346,617.1995 L 664.3993,622.7958 L 661.0766,620.254 L 658.1095,617.6928 L 654.8251,623.3524 L 651.7455,620.5144 L 648.0427,618.4302 L 644.0307,623.6416 L 641.135,620.8608 L 637.934,616.8232 L 633.7799,623.5339 L 630.7107,620.0705 L 628.1984,616.9256 L 625.9024,620.7105 L 621.4151,619.6991 L 618.7163,617.9502 L 615.2255,622.9987 L 611.4156,619.2681 L 607.9704,620.2237 L 604.2266,621.0669 L 600.4484,617.9068 L 597.1275,624.4422 L 593.976,618.9751 L 591.3033,619.291 L 588.2945,624.8958 L 584.8649,618.3926 L 582.2137,619.9522 L 579.2472,625.6976 L 576.0319,618.3248 L 572.1633,622.4097 L 569.0618,620.3726 L 565.514,618.1537 L 562.9989,622.7262 L 560.4139,621.0537 L 557.7907,617.7083 L 553.2639,623.7934 L 549.6258,618.991 L 546.1484,620.483 L 543.58,625.7158 L 539.5842,617.5959 L 534.8844,624.7569 L 532.188,619.6489 L 529.2262,618.1405 L 526.225,623.2139 L 523.4049,620.6973 L 520.3763,616.7903 L 517.3338,622.4731 L 514.2421,620.5795 L 511.2514,617.4467 L 508.8778,621.9926 L 504.9696,615.751 L 502.1703,610.8996 L 499.4737,617.6073 L 495.8148,615.9524 L 492.5825,609.9616 L 489.1773,621.6083 L 486.2208,615.5088 L 483.9104,611.5857 L 481.419,614.0588 L 478.7215,623.7047 L 474.3093,612.6907 L 471.5425,612.2721 L 467.6613,624.754 L 464.2553,614.3362 L 461.4745,609.6081 L 458.5584,621.93 L 455.3571,615.3867 L 452.4033,609.5535 L 449.6977,620.2258 L 445.4988,613.9152 L 441.6458,613.7696 L 439.1801,623.789 L 436.0414,614.9093 L 433.3223,610.5781 L 430.1642,618.3659 L 426.5142,616.5407 L 424.0545,612.5407 L 421.1016,612.9044 L 417.6851,624.3406 L 414.2939,614.2344 L 411.4007,610.0238 L 407.078,619.604 L 404.1413,617.2856 L 401.3108,612.1896 L 398.41,614.3697 L 395.6921,624.9316 L 392.2687,613.6214 L 389.3993,611.4444 L 386.3066,622.3237 L 382.9257,614.7214 L 379.8633,609.5133 L 376.1096,621.9379 L 372.9526,616.0314 L 370.1894,611.3047 L 366.6408,619.259 L 363.4311,616.7219 L 360.4296,611.4028 L 357.0373,618.4575 L 353.6779,616.684 L 349.8648,610.4457 L 346.4711,616.6972 L 343.6741,625.4298 L 340.4819,615.227 L 335.8684,617.0522 L 332.7395,616.726 L 329.785,610.9037 L 326.9125,617.2201 L 322.8874,615.4263 L 319.5375,609.9439 L 315.6465,624.9974 L 311.8588,612.2539 L 307.5545,620.1929 L 303.4716,614.6777 L 299.8463,612.7318 L 297.1539,623.9704 L 293.0874,612.9549 L 288.3857,619.471 L 285.6905,616.9218 L 282.3091,610.638 L 278.7308,620.6271 L 275.372,616.2204 L 271.2531,611.2134 L 267.6354,618.6991 L 264.9514,616.9655 L 261.7909,610.9788 L 258.8556,618.604 L 255.7633,616.3449 L 252.4034,609.7417 L 248.7306,625.3241 L 245.7697,613.5315 L 243.3033,610.8162 L 239.9428,622.9854 L 236.5762,615.5743 L 234.0911,611.1462 L 230.5112,620.7636 L 226.7251,613.8245 L 223.3724,613.1898 L 220.8342,625.2792 L 218.0916,612.9106 L 214.4873,620.0396 L 211.6729,615.2745 L 208.5323,611.472 L 206.3025,621.4303 L 202.8453,613.053 L 199.9554,615.7648 L 197.5494,618.09 L 194.6185,611.0695 L 191.4821,621.6802 L 188.0364,613.7144 L 184.9026,614.3356 L 182.1241,617.8874 L 179.9506,613.7106 L 177.071,614.6633 L 173.8415,615.8356 L 169.1257,619.7833 L 166.1133,614.4672 L 163.0601,614.929 L 159.8819,615.6098 L 157.3496,609.7188 L 153.8301,618.3325 L 151.4082,611.8211 L 148.2812,621.551 L 145.1565,612.1235 L 141.7456,619.0341 L 137.4734,611.0669 L 132.991,616.2877 L 129.9579,613.3774 L 125.4581,611.9004 L 122.3811,623.695 L 119.5335,611.0716 L 116.4332,624.9351 L 113.4086,610.5693 L 110.7122,618.4669 L 107.9292,611.4254 L 103.9973,613.1223 L 100.7409,618.3331 L 96.41691,618.6575 L 93.56117,618.9 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#39a6fa'>-<path d='M 90.0,630.0 L 93.56117,621.8173 L 96.41691,622.7071 L 100.7409,622.4852 L 103.9973,618.2012 L 107.9292,616.7433 L 110.7122,622.5956 L 113.4086,616.1403 L 116.4332,625.6171 L 119.5335,616.4638 L 122.3811,624.6759 L 125.4581,617.1332 L 129.9579,617.8859 L 132.991,620.8617 L 137.4734,616.472 L 141.7456,621.5645 L 145.1565,617.3543 L 148.2812,623.2153 L 151.4082,617.0736 L 153.8301,622.5462 L 157.3496,615.4601 L 159.8819,620.2281 L 163.0601,618.8729 L 166.1133,619.3104 L 169.1257,622.0477 L 173.8415,620.4533 L 177.071,618.6851 L 179.9506,618.6495 L 182.1241,622.159 L 184.9026,618.4567 L 188.0364,618.6671 L 191.4821,623.2776 L 194.6185,616.4591 L 197.5494,622.3883 L 199.9554,619.4123 L 202.8453,618.1108 L 206.3025,623.1134 L 208.5323,616.5672 L 211.6729,619.9909 L 214.4873,622.1942 L 218.0916,618.0025 L 220.8342,625.7357 L 223.3724,617.6963 L 226.7251,618.757 L 230.5112,622.6625 L 234.0911,616.5325 L 236.5762,620.2783 L 239.9428,624.1281 L 243.3033,616.1259 L 245.7697,618.5251 L 248.7306,625.7598 L 252.4034,615.4363 L 255.7633,620.8857 L 258.8556,621.2457 L 261.7909,616.3493 L 264.9514,621.3699 L 267.6354,621.3062 L 271.2531,616.5924 L 275.372,620.8191 L 278.7308,622.5618 L 282.3091,616.081 L 285.6905,621.3728 L 288.3857,621.8108 L 293.0874,618.018 L 297.1539,624.7825 L 299.8463,617.376 L 303.4716,619.4804 L 307.5545,622.2949 L 311.8588,617.4074 L 315.6465,625.5149 L 319.5375,615.5384 L 322.8874,620.1166 L 326.9125,620.335 L 329.785,616.3341 L 332.7395,621.2301 L 335.8684,620.2076 L 340.4819,619.9527 L 343.6741,625.8088 L 346.4711,619.9786 L 349.8648,615.928 L 353.6779,621.2037 L 357.0373,621.152 L 360.4296,616.7374 L 363.4311,621.2137 L 366.6408,621.6743 L 370.1894,616.6221 L 372.9526,620.6292 L 376.1096,623.4293 L 379.8633,615.2522 L 382.9257,619.5479 L 386.3066,623.6859 L 389.3993,616.5064 L 392.2687,618.5735 L 395.6921,625.4498 L 398.41,618.4493 L 401.3108,617.4083 L 404.1413,621.6687 L 407.078,621.8719 L 411.4007,615.6295 L 414.2939,619.0852 L 417.6851,625.027 L 421.1016,617.4764 L 424.0545,617.6534 L 426.5142,621.0322 L 430.1642,621.0731 L 433.3223,615.982 L 436.0414,619.6457 L 439.1801,624.6392 L 441.6458,618.0556 L 445.4988,618.865 L 449.6977,622.2949 L 452.4033,615.2775 L 455.3571,620.0561 L 458.5584,623.4138 L 461.4745,615.3144 L 464.2553,619.1888 L 467.6613,625.3171 L 471.5425,617.068 L 474.3093,617.8263 L 478.7215,624.5814 L 481.419,618.2194 L 483.9104,616.8789 L 486.2208,620.1571 L 489.1773,623.1971 L 492.5825,615.5064 L 495.8148,620.5264 L 499.4737,620.5599 L 502.1703,616.2953 L 504.9696,620.3881 L 508.8778,624.1105 L 511.2514,621.8933 L 514.2421,623.3125 L 517.3338,624.3312 L 520.3763,621.551 L 523.4049,623.3642 L 526.225,624.6959 L 529.2262,622.2304 L 532.188,622.8633 L 534.8844,625.4421 L 539.5842,621.9101 L 543.58,625.9133 L 546.1484,623.3747 L 549.6258,622.5609 L 553.2639,624.9971 L 557.7907,621.9406 L 560.4139,623.5086 L 562.9989,624.4651 L 565.514,622.2321 L 569.0618,623.112 L 572.1633,624.2866 L 576.0319,622.2415 L 579.2472,625.9145 L 582.2137,623.1161 L 584.8649,622.2767 L 588.2945,625.5041 L 591.3033,622.787 L 593.976,622.5639 L 597.1275,625.2818 L 600.4484,622.1106 L 604.2266,623.5095 L 607.9704,623.235 L 611.4156,622.6745 L 615.2255,624.5931 L 618.7163,622.1449 L 621.4151,622.802 L 625.9024,623.4972 L 628.1984,621.6491 L 630.7107,623.085 L 633.7799,624.8547 L 637.934,621.5804 L 641.135,623.4335 L 644.0307,624.9196 L 648.0427,622.3636 L 651.7455,623.2679 L 654.8251,624.7678 L 658.1095,621.9908 L 661.0766,623.0627 L 664.3993,624.4892 L 667.6346,621.7659 L 670.3676,623.0903 L 674.1383,624.0001 L 677.4062,621.957 L 680.3694,623.7385 L 683.8974,623.5242 L 686.7041,622.125 L 690.0451,625.7792 L 692.8351,623.1272 L 695.2176,622.1848 L 698.3422,623.7455 L 701.6787,623.4969 L 705.0621,621.7779 L 707.6247,623.5083 L 710.665,624.2411 L 713.2368,622.2148 L 716.4565,623.306 L 719.7726,624.1474 L 722.6103,622.1775 L 727.0604,623.6049 L 730.1509,624.852 L 733.6457,622.5844 L 736.2556,622.6191 L 739.6113,624.9566 L 742.3556,622.656 L 745.2577,622.7567 L 748.5497,624.5878 L 752.0964,621.775 L 757.1347,623.8113 L 760.1255,623.9267 L 763.8369,622.137 L 767.4715,625.219 L 770.7028,622.2756 L 774.4631,623.8192 L 777.4632,624.1257 L 780.0684,621.7988 L 783.3133,623.8829 L 786.1083,623.8148 L 789.3441,622.095 L 792.9731,625.1351 L 796.4929,621.9711 L 800.5749,625.7563 L 804.9764,621.9253 L 808.6477,625.8854 L 811.8924,622.952 L 815.0348,622.9062 L 818.7569,624.0183 L 822.6119,622.4946 L 825.4594,625.1574 L 828.4501,622.4934 L 832.227,623.9299 L 835.7178,623.3078 L 838.3943,622.3437 L 841.0206,625.8326 L 844.5857,622.021 L 847.9327,625.7398 L 850.9386,622.7829 L 853.8989,623.2053 L 857.1536,623.3201 L 859.8448,622.6552 L 863.1617,625.3558 L 866.3971,623.127 L 869.2519,622.6273 L 872.7499,624.3662 L 875.9817,621.9697 L 879.5555,625.5763 L 882.3518,622.9675 L 885.2014,622.7603 L 888.9416,623.6507 L 892.3162,622.8894 L 895.1255,624.6732 L 897.9262,622.1129 L 900.4222,623.922 L 903.6589,622.5527 L 907.2527,625.1456 L 911.2496,622.1755 L 914.1828,625.7293 L 917.3226,622.9496 L 920.9951,625.0106 L 924.0882,622.6138 L 928.0172,623.8944 L 930.0,630.0 L 930.0,630.0 L 928.0172,622.5134 L 924.0882,620.6858 L 920.9951,624.2707 L 917.3226,621.3343 L 914.1828,625.2325 L 911.2496,620.2774 L 907.2527,624.5044 L 903.6589,620.8546 L 900.4222,621.9341 L 897.9262,620.2748 L 895.1255,623.8938 L 892.3162,621.0496 L 888.9416,622.4705 L 885.2014,620.9768 L 882.3518,621.5469 L 879.5555,625.1474 L 875.9817,620.1218 L 872.7499,623.4889 L 869.2519,620.8138 L 866.3971,621.7548 L 863.1617,624.8829 L 859.8448,620.8364 L 857.1536,622.0483 L 853.8989,621.2924 L 850.9386,621.3023 L 847.9327,625.4007 L 844.5857,620.2014 L 841.0206,625.5226 L 838.3943,620.6157 L 835.7178,622.0739 L 832.227,621.9271 L 828.4501,620.8966 L 825.4594,624.6139 L 822.6119,620.682 L 818.7569,623.0107 L 815.0348,621.0381 L 811.8924,621.5604 L 808.6477,625.6151 L 804.9764,620.1392 L 800.5749,625.4595 L 796.4929,620.1718 L 792.9731,624.5819 L 789.3441,620.3573 L 786.1083,622.7949 L 783.3133,621.8907 L 780.0684,619.9589 L 777.4632,623.1754 L 774.4631,621.834 L 770.7028,620.6004 L 767.4715,624.7135 L 763.8369,620.3914 L 760.1255,622.8997 L 757.1347,621.8596 L 752.0964,619.9439 L 748.5497,623.8409 L 745.2577,620.9318 L 742.3556,621.1649 L 739.6113,624.4175 L 736.2556,620.7853 L 733.6457,621.0669 L 730.1509,624.2294 L 727.0604,621.6585 L 722.6103,620.475 L 719.7726,623.2297 L 716.4565,621.3649 L 713.2368,620.5361 L 710.665,623.3595 L 707.6247,621.5804 L 705.0621,619.9839 L 701.6787,622.3308 L 698.3422,621.77 L 695.2176,620.4542 L 692.8351,621.8343 L 690.0451,625.5282 L 686.7041,620.3643 L 683.8974,622.3739 L 680.3694,621.755 L 677.4062,620.2017 L 674.1383,623.0075 L 670.3676,621.2125 L 667.6346,619.9313 L 664.3993,623.7176 L 661.0766,621.1779 L 658.1095,620.2733 L 654.8251,624.1055 L 651.7455,621.3734 L 648.0427,620.7642 L 644.0307,624.2978 L 641.135,621.5055 L 637.934,619.6665 L 633.7799,624.2267 L 630.7107,621.1685 L 628.1984,619.7396 L 625.9024,622.2958 L 621.4151,620.9268 L 618.7163,620.4574 L 615.2255,623.8647 L 611.4156,620.8681 L 607.9704,621.9852 L 604.2266,621.5401 L 600.4484,620.3949 L 597.1275,624.8195 L 593.976,620.7645 L 591.3033,621.3637 L 588.2945,625.1439 L 584.8649,620.5038 L 582.2137,621.8135 L 579.2472,625.7005 L 576.0319,620.5135 L 572.1633,623.4534 L 569.0618,621.1849 L 565.514,620.5728 L 562.9989,623.676 L 560.4139,621.6044 L 557.7907,620.2214 L 553.2639,624.4026 L 549.6258,620.7572 L 546.1484,622.1725 L 543.58,625.7187 L 539.5842,620.1926 L 534.8844,625.0432 L 532.188,621.0041 L 529.2262,620.564 L 526.225,624.008 L 523.4049,621.4565 L 520.3763,619.6777 L 517.3338,623.5095 L 514.2421,621.4163 L 511.2514,620.1054 L 508.8778,623.1918 L 504.9696,617.435 L 502.1703,615.4824 L 499.4737,620.2525 L 495.8148,617.4297 L 492.5825,614.9604 L 489.1773,622.9514 L 486.2208,617.2445 L 483.9104,615.7489 L 481.419,617.8592 L 478.7215,624.355 L 474.3093,616.1829 L 471.5425,616.6391 L 467.6613,625.0388 L 464.2553,616.8892 L 461.4745,614.8441 L 458.5584,623.1513 L 455.3571,617.339 L 452.4033,614.8001 L 449.6977,622.0034 L 445.4988,616.6781 L 441.6458,617.6522 L 439.1801,624.4084 L 436.0414,617.132 L 433.3223,615.251 L 430.1642,620.7542 L 426.5142,617.7973 L 424.0545,616.1605 L 421.1016,617.0836 L 417.6851,624.7619 L 414.2939,616.7186 L 411.4007,615.0455 L 407.078,621.5768 L 404.1413,617.9511 L 401.3108,615.9682 L 398.41,618.0644 L 395.6921,625.1459 L 392.2687,616.5909 L 389.3993,616.0889 L 386.3066,623.4173 L 382.9257,617.0069 L 379.8633,614.7801 L 376.1096,623.1651 L 372.9526,617.4999 L 370.1894,615.5431 L 366.6408,621.3669 L 363.4311,617.8554 L 360.4296,615.6832 L 357.0373,620.8121 L 353.6779,617.797 L 349.8648,615.1979 L 346.4711,619.6228 L 343.6741,625.4407 L 340.4819,617.2277 L 335.8684,619.8588 L 332.7395,617.8243 L 329.785,615.4454 L 326.9125,619.9915 L 322.8874,617.314 L 319.5375,615.0743 L 315.6465,625.1706 L 311.8588,615.933 L 307.5545,621.9867 L 303.4716,617.0204 L 299.8463,616.9462 L 297.1539,624.4945 L 293.0874,616.327 L 288.3857,621.4982 L 285.6905,617.9449 L 282.3091,615.3896 L 278.7308,622.2756 L 275.372,617.6123 L 271.2531,615.5804 L 267.6354,620.9715 L 264.9514,617.8337 L 261.7909,615.4096 L 258.8556,620.8969 L 255.7633,617.7027 L 252.4034,614.9351 L 248.7306,625.3476 L 245.7697,616.4958 L 243.3033,615.6529 L 239.9428,623.8515 L 236.5762,617.3683 L 234.0911,615.6016 L 230.5112,622.3578 L 226.7251,616.6767 L 223.3724,617.2515 L 220.8342,625.2953 L 218.0916,616.3018 L 214.4873,621.8525 L 211.6729,617.2518 L 208.5323,616.0872 L 206.3025,622.8043 L 202.8453,616.381 L 199.9554,618.9825 L 197.5494,618.3853 L 194.6185,615.4313 L 191.4821,622.9543 L 188.0364,616.6326 L 184.9026,618.0084 L 182.1241,618.3454 L 179.9506,616.645 L 177.071,618.2332 L 173.8415,617.3584 L 169.1257,621.6858 L 166.1133,616.8135 L 163.0601,618.3947 L 159.8819,617.3058 L 157.3496,614.8814 L 153.8301,618.4931 L 151.4082,615.7674 L 148.2812,622.8736 L 145.1565,615.8746 L 141.7456,621.1567 L 137.4734,615.5983 L 132.991,617.6575 L 129.9579,617.3231 L 125.4581,615.9768 L 122.3811,624.247 L 119.5335,615.5434 L 116.4332,624.9777 L 113.4086,615.3811 L 110.7122,618.4939 L 107.9292,615.9348 L 103.9973,616.5058 L 100.7409,618.4364 L 96.41691,618.7385 L 93.56117,620.7833 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#549a4a'>-<path d='M 90.0,630.0 L 93.56117,623.0861 L 96.41691,623.976 L 100.7409,623.754 L 103.9973,619.4701 L 107.9292,618.0122 L 110.7122,623.8644 L 113.4086,617.4091 L 116.4332,626.886 L 119.5335,617.7327 L 122.3811,625.9448 L 125.4581,618.402 L 129.9579,619.1548 L 132.991,622.1305 L 137.4734,617.7409 L 141.7456,622.8334 L 145.1565,618.6231 L 148.2812,624.4842 L 151.4082,618.3424 L 153.8301,623.8151 L 157.3496,616.7289 L 159.8819,621.497 L 163.0601,620.1418 L 166.1133,620.5792 L 169.1257,623.3166 L 173.8415,621.7222 L 177.071,619.9539 L 179.9506,619.9184 L 182.1241,623.4279 L 184.9026,619.7255 L 188.0364,619.936 L 191.4821,624.5464 L 194.6185,617.728 L 197.5494,623.6572 L 199.9554,620.6811 L 202.8453,619.3797 L 206.3025,624.3823 L 208.5323,617.836 L 211.6729,621.2598 L 214.4873,623.4631 L 218.0916,619.2713 L 220.8342,627.0046 L 223.3724,618.9651 L 226.7251,620.0258 L 230.5112,623.9314 L 234.0911,617.8014 L 236.5762,621.5472 L 239.9428,625.3969 L 243.3033,617.3948 L 245.7697,619.7939 L 248.7306,627.0287 L 252.4034,616.7051 L 255.7633,622.1546 L 258.8556,622.5145 L 261.7909,617.6182 L 264.9514,622.6387 L 267.6354,622.575 L 271.2531,617.8613 L 275.372,622.088 L 278.7308,623.8307 L 282.3091,617.3498 L 285.6905,622.6417 L 288.3857,623.0797 L 293.0874,619.2869 L 297.1539,626.0513 L 299.8463,618.6448 L 303.4716,620.7492 L 307.5545,623.5638 L 311.8588,618.6762 L 315.6465,626.7838 L 319.5375,616.8073 L 322.8874,621.3854 L 326.9125,621.6038 L 329.785,617.6029 L 332.7395,622.499 L 335.8684,621.4764 L 340.4819,621.2216 L 343.6741,627.0777 L 346.4711,621.2474 L 349.8648,617.1969 L 353.6779,622.4726 L 357.0373,622.4209 L 360.4296,618.0063 L 363.4311,622.4825 L 366.6408,622.9432 L 370.1894,617.8909 L 372.9526,621.898 L 376.1096,624.6982 L 379.8633,616.5211 L 382.9257,620.8168 L 386.3066,624.9548 L 389.3993,617.7752 L 392.2687,619.8424 L 395.6921,626.7186 L 398.41,619.7182 L 401.3108,618.6771 L 404.1413,622.9376 L 407.078,623.1408 L 411.4007,616.8983 L 414.2939,620.3541 L 417.6851,626.2959 L 421.1016,618.7452 L 424.0545,618.9223 L 426.5142,622.3011 L 430.1642,622.3419 L 433.3223,617.2509 L 436.0414,620.9145 L 439.1801,625.9081 L 441.6458,619.3245 L 445.4988,620.1339 L 449.6977,623.5638 L 452.4033,616.5463 L 455.3571,621.3249 L 458.5584,624.6826 L 461.4745,616.5833 L 464.2553,620.4577 L 467.6613,626.5859 L 471.5425,618.3369 L 474.3093,619.0952 L 478.7215,625.8502 L 481.419,619.4883 L 483.9104,618.1478 L 486.2208,621.4259 L 489.1773,624.466 L 492.5825,616.7753 L 495.8148,621.7953 L 499.4737,621.8287 L 502.1703,617.5642 L 504.9696,621.657 L 508.8778,625.3793 L 511.2514,623.1622 L 514.2421,624.5814 L 517.3338,625.6001 L 520.3763,622.8199 L 523.4049,624.633 L 526.225,625.9647 L 529.2262,623.4992 L 532.188,624.1322 L 534.8844,626.711 L 539.5842,623.1789 L 543.58,627.1822 L 546.1484,624.6436 L 549.6258,623.8298 L 553.2639,626.2659 L 557.7907,623.2094 L 560.4139,624.7775 L 562.9989,625.734 L 565.514,623.501 L 569.0618,624.3808 L 572.1633,625.5555 L 576.0319,623.5104 L 579.2472,627.1834 L 582.2137,624.385 L 584.8649,623.5456 L 588.2945,626.7729 L 591.3033,624.0558 L 593.976,623.8327 L 597.1275,626.5507 L 600.4484,623.3794 L 604.2266,624.7784 L 607.9704,624.5039 L 611.4156,623.9434 L 615.2255,625.862 L 618.7163,623.4138 L 621.4151,624.0708 L 625.9024,624.766 L 628.1984,622.9179 L 630.7107,624.3538 L 633.7799,626.1235 L 637.934,622.8492 L 641.135,624.7023 L 644.0307,626.1884 L 648.0427,623.6325 L 651.7455,624.5367 L 654.8251,626.0366 L 658.1095,623.2597 L 661.0766,624.3315 L 664.3993,625.758 L 667.6346,623.0348 L 670.3676,624.3591 L 674.1383,625.2689 L 677.4062,623.2259 L 680.3694,625.0073 L 683.8974,624.793 L 686.7041,623.3938 L 690.0451,627.048 L 692.8351,624.3961 L 695.2176,623.4537 L 698.3422,625.0144 L 701.6787,624.7657 L 705.0621,623.0468 L 707.6247,624.7772 L 710.665,625.51 L 713.2368,623.4837 L 716.4565,624.5749 L 719.7726,625.4163 L 722.6103,623.4464 L 727.0604,624.8738 L 730.1509,626.1209 L 733.6457,623.8533 L 736.2556,623.8879 L 739.6113,626.2254 L 742.3556,623.9249 L 745.2577,624.0256 L 748.5497,625.8567 L 752.0964,623.0439 L 757.1347,625.0802 L 760.1255,625.1955 L 763.8369,623.4059 L 767.4715,626.4879 L 770.7028,623.5444 L 774.4631,625.0881 L 777.4632,625.3946 L 780.0684,623.0676 L 783.3133,625.1518 L 786.1083,625.0837 L 789.3441,623.3639 L 792.9731,626.4039 L 796.4929,623.24 L 800.5749,627.0251 L 804.9764,623.1942 L 808.6477,627.1543 L 811.8924,624.2208 L 815.0348,624.175 L 818.7569,625.2871 L 822.6119,623.7634 L 825.4594,626.4262 L 828.4501,623.7623 L 832.227,625.1988 L 835.7178,624.5767 L 838.3943,623.6125 L 841.0206,627.1015 L 844.5857,623.2899 L 847.9327,627.0087 L 850.9386,624.0517 L 853.8989,624.4742 L 857.1536,624.589 L 859.8448,623.924 L 863.1617,626.6247 L 866.3971,624.3958 L 869.2519,623.8961 L 872.7499,625.635 L 875.9817,623.2385 L 879.5555,626.8452 L 882.3518,624.2364 L 885.2014,624.0291 L 888.9416,624.9196 L 892.3162,624.1583 L 895.1255,625.9421 L 897.9262,623.3818 L 900.4222,625.1908 L 903.6589,623.8216 L 907.2527,626.4145 L 911.2496,623.4443 L 914.1828,626.9981 L 917.3226,624.2185 L 920.9951,626.2794 L 924.0882,623.8826 L 928.0172,625.1632 L 930.0,630.0 L 930.0,630.0 L 928.0172,623.8944 L 924.0882,622.6138 L 920.9951,625.0106 L 917.3226,622.9496 L 914.1828,625.7293 L 911.2496,622.1755 L 907.2527,625.1456 L 903.6589,622.5527 L 900.4222,623.922 L 897.9262,622.1129 L 895.1255,624.6732 L 892.3162,622.8894 L 888.9416,623.6507 L 885.2014,622.7603 L 882.3518,622.9675 L 879.5555,625.5763 L 875.9817,621.9697 L 872.7499,624.3662 L 869.2519,622.6273 L 866.3971,623.127 L 863.1617,625.3558 L 859.8448,622.6552 L 857.1536,623.3201 L 853.8989,623.2053 L 850.9386,622.7829 L 847.9327,625.7398 L 844.5857,622.021 L 841.0206,625.8326 L 838.3943,622.3437 L 835.7178,623.3078 L 832.227,623.9299 L 828.4501,622.4934 L 825.4594,625.1574 L 822.6119,622.4946 L 818.7569,624.0183 L 815.0348,622.9062 L 811.8924,622.952 L 808.6477,625.8854 L 804.9764,621.9253 L 800.5749,625.7563 L 796.4929,621.9711 L 792.9731,625.1351 L 789.3441,622.095 L 786.1083,623.8148 L 783.3133,623.8829 L 780.0684,621.7988 L 777.4632,624.1257 L 774.4631,623.8192 L 770.7028,622.2756 L 767.4715,625.219 L 763.8369,622.137 L 760.1255,623.9267 L 757.1347,623.8113 L 752.0964,621.775 L 748.5497,624.5878 L 745.2577,622.7567 L 742.3556,622.656 L 739.6113,624.9566 L 736.2556,622.6191 L 733.6457,622.5844 L 730.1509,624.852 L 727.0604,623.6049 L 722.6103,622.1775 L 719.7726,624.1474 L 716.4565,623.306 L 713.2368,622.2148 L 710.665,624.2411 L 707.6247,623.5083 L 705.0621,621.7779 L 701.6787,623.4969 L 698.3422,623.7455 L 695.2176,622.1848 L 692.8351,623.1272 L 690.0451,625.7792 L 686.7041,622.125 L 683.8974,623.5242 L 680.3694,623.7385 L 677.4062,621.957 L 674.1383,624.0001 L 670.3676,623.0903 L 667.6346,621.7659 L 664.3993,624.4892 L 661.0766,623.0627 L 658.1095,621.9908 L 654.8251,624.7678 L 651.7455,623.2679 L 648.0427,622.3636 L 644.0307,624.9196 L 641.135,623.4335 L 637.934,621.5804 L 633.7799,624.8547 L 630.7107,623.085 L 628.1984,621.6491 L 625.9024,623.4972 L 621.4151,622.802 L 618.7163,622.1449 L 615.2255,624.5931 L 611.4156,622.6745 L 607.9704,623.235 L 604.2266,623.5095 L 600.4484,622.1106 L 597.1275,625.2818 L 593.976,622.5639 L 591.3033,622.787 L 588.2945,625.5041 L 584.8649,622.2767 L 582.2137,623.1161 L 579.2472,625.9145 L 576.0319,622.2415 L 572.1633,624.2866 L 569.0618,623.112 L 565.514,622.2321 L 562.9989,624.4651 L 560.4139,623.5086 L 557.7907,621.9406 L 553.2639,624.9971 L 549.6258,622.5609 L 546.1484,623.3747 L 543.58,625.9133 L 539.5842,621.9101 L 534.8844,625.4421 L 532.188,622.8633 L 529.2262,622.2304 L 526.225,624.6959 L 523.4049,623.3642 L 520.3763,621.551 L 517.3338,624.3312 L 514.2421,623.3125 L 511.2514,621.8933 L 508.8778,624.1105 L 504.9696,620.3881 L 502.1703,616.2953 L 499.4737,620.5599 L 495.8148,620.5264 L 492.5825,615.5064 L 489.1773,623.1971 L 486.2208,620.1571 L 483.9104,616.8789 L 481.419,618.2194 L 478.7215,624.5814 L 474.3093,617.8263 L 471.5425,617.068 L 467.6613,625.3171 L 464.2553,619.1888 L 461.4745,615.3144 L 458.5584,623.4138 L 455.3571,620.0561 L 452.4033,615.2775 L 449.6977,622.2949 L 445.4988,618.865 L 441.6458,618.0556 L 439.1801,624.6392 L 436.0414,619.6457 L 433.3223,615.982 L 430.1642,621.0731 L 426.5142,621.0322 L 424.0545,617.6534 L 421.1016,617.4764 L 417.6851,625.027 L 414.2939,619.0852 L 411.4007,615.6295 L 407.078,621.8719 L 404.1413,621.6687 L 401.3108,617.4083 L 398.41,618.4493 L 395.6921,625.4498 L 392.2687,618.5735 L 389.3993,616.5064 L 386.3066,623.6859 L 382.9257,619.5479 L 379.8633,615.2522 L 376.1096,623.4293 L 372.9526,620.6292 L 370.1894,616.6221 L 366.6408,621.6743 L 363.4311,621.2137 L 360.4296,616.7374 L 357.0373,621.152 L 353.6779,621.2037 L 349.8648,615.928 L 346.4711,619.9786 L 343.6741,625.8088 L 340.4819,619.9527 L 335.8684,620.2076 L 332.7395,621.2301 L 329.785,616.3341 L 326.9125,620.335 L 322.8874,620.1166 L 319.5375,615.5384 L 315.6465,625.5149 L 311.8588,617.4074 L 307.5545,622.2949 L 303.4716,619.4804 L 299.8463,617.376 L 297.1539,624.7825 L 293.0874,618.018 L 288.3857,621.8108 L 285.6905,621.3728 L 282.3091,616.081 L 278.7308,622.5618 L 275.372,620.8191 L 271.2531,616.5924 L 267.6354,621.3062 L 264.9514,621.3699 L 261.7909,616.3493 L 258.8556,621.2457 L 255.7633,620.8857 L 252.4034,615.4363 L 248.7306,625.7598 L 245.7697,618.5251 L 243.3033,616.1259 L 239.9428,624.1281 L 236.5762,620.2783 L 234.0911,616.5325 L 230.5112,622.6625 L 226.7251,618.757 L 223.3724,617.6963 L 220.8342,625.7357 L 218.0916,618.0025 L 214.4873,622.1942 L 211.6729,619.9909 L 208.5323,616.5672 L 206.3025,623.1134 L 202.8453,618.1108 L 199.9554,619.4123 L 197.5494,622.3883 L 194.6185,616.4591 L 191.4821,623.2776 L 188.0364,618.6671 L 184.9026,618.4567 L 182.1241,622.159 L 179.9506,618.6495 L 177.071,618.6851 L 173.8415,620.4533 L 169.1257,622.0477 L 166.1133,619.3104 L 163.0601,618.8729 L 159.8819,620.2281 L 157.3496,615.4601 L 153.8301,622.5462 L 151.4082,617.0736 L 148.2812,623.2153 L 145.1565,617.3543 L 141.7456,621.5645 L 137.4734,616.472 L 132.991,620.8617 L 129.9579,617.8859 L 125.4581,617.1332 L 122.3811,624.6759 L 119.5335,616.4638 L 116.4332,625.6171 L 113.4086,616.1403 L 110.7122,622.5956 L 107.9292,616.7433 L 103.9973,618.2012 L 100.7409,622.4852 L 96.41691,622.7071 L 93.56117,621.8173 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#bf3725'>-<path d='M 90.0,630.0 L 93.56117,630.0 L 96.41691,630.0 L 100.7409,630.0 L 103.9973,630.0 L 107.9292,630.0 L 110.7122,630.0 L 113.4086,630.0 L 116.4332,630.0 L 119.5335,630.0 L 122.3811,630.0 L 125.4581,630.0 L 129.9579,630.0 L 132.991,630.0 L 137.4734,630.0 L 141.7456,630.0 L 145.1565,630.0 L 148.2812,630.0 L 151.4082,630.0 L 153.8301,630.0 L 157.3496,630.0 L 159.8819,630.0 L 163.0601,630.0 L 166.1133,630.0 L 169.1257,630.0 L 173.8415,630.0 L 177.071,630.0 L 179.9506,630.0 L 182.1241,630.0 L 184.9026,630.0 L 188.0364,630.0 L 191.4821,630.0 L 194.6185,630.0 L 197.5494,630.0 L 199.9554,630.0 L 202.8453,630.0 L 206.3025,630.0 L 208.5323,630.0 L 211.6729,630.0 L 214.4873,630.0 L 218.0916,630.0 L 220.8342,630.0 L 223.3724,630.0 L 226.7251,630.0 L 230.5112,630.0 L 234.0911,630.0 L 236.5762,630.0 L 239.9428,630.0 L 243.3033,630.0 L 245.7697,630.0 L 248.7306,630.0 L 252.4034,630.0 L 255.7633,630.0 L 258.8556,630.0 L 261.7909,630.0 L 264.9514,630.0 L 267.6354,630.0 L 271.2531,630.0 L 275.372,630.0 L 278.7308,630.0 L 282.3091,630.0 L 285.6905,630.0 L 288.3857,630.0 L 293.0874,630.0 L 297.1539,630.0 L 299.8463,630.0 L 303.4716,630.0 L 307.5545,630.0 L 311.8588,630.0 L 315.6465,630.0 L 319.5375,630.0 L 322.8874,630.0 L 326.9125,630.0 L 329.785,630.0 L 332.7395,630.0 L 335.8684,630.0 L 340.4819,630.0 L 343.6741,630.0 L 346.4711,630.0 L 349.8648,630.0 L 353.6779,630.0 L 357.0373,630.0 L 360.4296,630.0 L 363.4311,630.0 L 366.6408,630.0 L 370.1894,630.0 L 372.9526,630.0 L 376.1096,630.0 L 379.8633,630.0 L 382.9257,630.0 L 386.3066,630.0 L 389.3993,630.0 L 392.2687,630.0 L 395.6921,630.0 L 398.41,630.0 L 401.3108,630.0 L 404.1413,630.0 L 407.078,630.0 L 411.4007,630.0 L 414.2939,630.0 L 417.6851,630.0 L 421.1016,630.0 L 424.0545,630.0 L 426.5142,630.0 L 430.1642,630.0 L 433.3223,630.0 L 436.0414,630.0 L 439.1801,630.0 L 441.6458,630.0 L 445.4988,630.0 L 449.6977,630.0 L 452.4033,630.0 L 455.3571,630.0 L 458.5584,630.0 L 461.4745,630.0 L 464.2553,630.0 L 467.6613,630.0 L 471.5425,630.0 L 474.3093,630.0 L 478.7215,630.0 L 481.419,630.0 L 483.9104,630.0 L 486.2208,630.0 L 489.1773,630.0 L 492.5825,630.0 L 495.8148,630.0 L 499.4737,630.0 L 502.1703,630.0 L 504.9696,630.0 L 508.8778,630.0 L 511.2514,630.0 L 514.2421,630.0 L 517.3338,630.0 L 520.3763,630.0 L 523.4049,630.0 L 526.225,630.0 L 529.2262,630.0 L 532.188,630.0 L 534.8844,630.0 L 539.5842,630.0 L 543.58,630.0 L 546.1484,630.0 L 549.6258,630.0 L 553.2639,630.0 L 557.7907,630.0 L 560.4139,630.0 L 562.9989,630.0 L 565.514,630.0 L 569.0618,630.0 L 572.1633,630.0 L 576.0319,630.0 L 579.2472,630.0 L 582.2137,630.0 L 584.8649,630.0 L 588.2945,630.0 L 591.3033,630.0 L 593.976,630.0 L 597.1275,630.0 L 600.4484,630.0 L 604.2266,630.0 L 607.9704,630.0 L 611.4156,630.0 L 615.2255,630.0 L 618.7163,630.0 L 621.4151,630.0 L 625.9024,630.0 L 628.1984,630.0 L 630.7107,630.0 L 633.7799,630.0 L 637.934,630.0 L 641.135,630.0 L 644.0307,630.0 L 648.0427,630.0 L 651.7455,630.0 L 654.8251,630.0 L 658.1095,630.0 L 661.0766,630.0 L 664.3993,630.0 L 667.6346,630.0 L 670.3676,630.0 L 674.1383,630.0 L 677.4062,630.0 L 680.3694,630.0 L 683.8974,630.0 L 686.7041,630.0 L 690.0451,630.0 L 692.8351,630.0 L 695.2176,630.0 L 698.3422,630.0 L 701.6787,630.0 L 705.0621,630.0 L 707.6247,630.0 L 710.665,630.0 L 713.2368,630.0 L 716.4565,630.0 L 719.7726,630.0 L 722.6103,630.0 L 727.0604,630.0 L 730.1509,630.0 L 733.6457,630.0 L 736.2556,630.0 L 739.6113,630.0 L 742.3556,630.0 L 745.2577,630.0 L 748.5497,630.0 L 752.0964,630.0 L 757.1347,630.0 L 760.1255,630.0 L 763.8369,630.0 L 767.4715,630.0 L 770.7028,630.0 L 774.4631,630.0 L 777.4632,630.0 L 780.0684,630.0 L 783.3133,630.0 L 786.1083,630.0 L 789.3441,630.0 L 792.9731,630.0 L 796.4929,630.0 L 800.5749,630.0 L 804.9764,630.0 L 808.6477,630.0 L 811.8924,630.0 L 815.0348,630.0 L 818.7569,630.0 L 822.6119,630.0 L 825.4594,630.0 L 828.4501,630.0 L 832.227,630.0 L 835.7178,630.0 L 838.3943,630.0 L 841.0206,630.0 L 844.5857,630.0 L 847.9327,630.0 L 850.9386,630.0 L 853.8989,630.0 L 857.1536,630.0 L 859.8448,630.0 L 863.1617,630.0 L 866.3971,630.0 L 869.2519,630.0 L 872.7499,630.0 L 875.9817,630.0 L 879.5555,630.0 L 882.3518,630.0 L 885.2014,630.0 L 888.9416,630.0 L 892.3162,630.0 L 895.1255,630.0 L 897.9262,630.0 L 900.4222,630.0 L 903.6589,630.0 L 907.2527,630.0 L 911.2496,630.0 L 914.1828,630.0 L 917.3226,630.0 L 920.9951,630.0 L 924.0882,630.0 L 928.0172,630.0 L 930.0,630.0 L 930.0,630.0 L 928.0172,625.1632 L 924.0882,623.8826 L 920.9951,626.2794 L 917.3226,624.2185 L 914.1828,626.9981 L 911.2496,623.4443 L 907.2527,626.4145 L 903.6589,623.8216 L 900.4222,625.1908 L 897.9262,623.3818 L 895.1255,625.9421 L 892.3162,624.1583 L 888.9416,624.9196 L 885.2014,624.0291 L 882.3518,624.2364 L 879.5555,626.8452 L 875.9817,623.2385 L 872.7499,625.635 L 869.2519,623.8961 L 866.3971,624.3958 L 863.1617,626.6247 L 859.8448,623.924 L 857.1536,624.589 L 853.8989,624.4742 L 850.9386,624.0517 L 847.9327,627.0087 L 844.5857,623.2899 L 841.0206,627.1015 L 838.3943,623.6125 L 835.7178,624.5767 L 832.227,625.1988 L 828.4501,623.7623 L 825.4594,626.4262 L 822.6119,623.7634 L 818.7569,625.2871 L 815.0348,624.175 L 811.8924,624.2208 L 808.6477,627.1543 L 804.9764,623.1942 L 800.5749,627.0251 L 796.4929,623.24 L 792.9731,626.4039 L 789.3441,623.3639 L 786.1083,625.0837 L 783.3133,625.1518 L 780.0684,623.0676 L 777.4632,625.3946 L 774.4631,625.0881 L 770.7028,623.5444 L 767.4715,626.4879 L 763.8369,623.4059 L 760.1255,625.1955 L 757.1347,625.0802 L 752.0964,623.0439 L 748.5497,625.8567 L 745.2577,624.0256 L 742.3556,623.9249 L 739.6113,626.2254 L 736.2556,623.8879 L 733.6457,623.8533 L 730.1509,626.1209 L 727.0604,624.8738 L 722.6103,623.4464 L 719.7726,625.4163 L 716.4565,624.5749 L 713.2368,623.4837 L 710.665,625.51 L 707.6247,624.7772 L 705.0621,623.0468 L 701.6787,624.7657 L 698.3422,625.0144 L 695.2176,623.4537 L 692.8351,624.3961 L 690.0451,627.048 L 686.7041,623.3938 L 683.8974,624.793 L 680.3694,625.0073 L 677.4062,623.2259 L 674.1383,625.2689 L 670.3676,624.3591 L 667.6346,623.0348 L 664.3993,625.758 L 661.0766,624.3315 L 658.1095,623.2597 L 654.8251,626.0366 L 651.7455,624.5367 L 648.0427,623.6325 L 644.0307,626.1884 L 641.135,624.7023 L 637.934,622.8492 L 633.7799,626.1235 L 630.7107,624.3538 L 628.1984,622.9179 L 625.9024,624.766 L 621.4151,624.0708 L 618.7163,623.4138 L 615.2255,625.862 L 611.4156,623.9434 L 607.9704,624.5039 L 604.2266,624.7784 L 600.4484,623.3794 L 597.1275,626.5507 L 593.976,623.8327 L 591.3033,624.0558 L 588.2945,626.7729 L 584.8649,623.5456 L 582.2137,624.385 L 579.2472,627.1834 L 576.0319,623.5104 L 572.1633,625.5555 L 569.0618,624.3808 L 565.514,623.501 L 562.9989,625.734 L 560.4139,624.7775 L 557.7907,623.2094 L 553.2639,626.2659 L 549.6258,623.8298 L 546.1484,624.6436 L 543.58,627.1822 L 539.5842,623.1789 L 534.8844,626.711 L 532.188,624.1322 L 529.2262,623.4992 L 526.225,625.9647 L 523.4049,624.633 L 520.3763,622.8199 L 517.3338,625.6001 L 514.2421,624.5814 L 511.2514,623.1622 L 508.8778,625.3793 L 504.9696,621.657 L 502.1703,617.5642 L 499.4737,621.8287 L 495.8148,621.7953 L 492.5825,616.7753 L 489.1773,624.466 L 486.2208,621.4259 L 483.9104,618.1478 L 481.419,619.4883 L 478.7215,625.8502 L 474.3093,619.0952 L 471.5425,618.3369 L 467.6613,626.5859 L 464.2553,620.4577 L 461.4745,616.5833 L 458.5584,624.6826 L 455.3571,621.3249 L 452.4033,616.5463 L 449.6977,623.5638 L 445.4988,620.1339 L 441.6458,619.3245 L 439.1801,625.9081 L 436.0414,620.9145 L 433.3223,617.2509 L 430.1642,622.3419 L 426.5142,622.3011 L 424.0545,618.9223 L 421.1016,618.7452 L 417.6851,626.2959 L 414.2939,620.3541 L 411.4007,616.8983 L 407.078,623.1408 L 404.1413,622.9376 L 401.3108,618.6771 L 398.41,619.7182 L 395.6921,626.7186 L 392.2687,619.8424 L 389.3993,617.7752 L 386.3066,624.9548 L 382.9257,620.8168 L 379.8633,616.5211 L 376.1096,624.6982 L 372.9526,621.898 L 370.1894,617.8909 L 366.6408,622.9432 L 363.4311,622.4825 L 360.4296,618.0063 L 357.0373,622.4209 L 353.6779,622.4726 L 349.8648,617.1969 L 346.4711,621.2474 L 343.6741,627.0777 L 340.4819,621.2216 L 335.8684,621.4764 L 332.7395,622.499 L 329.785,617.6029 L 326.9125,621.6038 L 322.8874,621.3854 L 319.5375,616.8073 L 315.6465,626.7838 L 311.8588,618.6762 L 307.5545,623.5638 L 303.4716,620.7492 L 299.8463,618.6448 L 297.1539,626.0513 L 293.0874,619.2869 L 288.3857,623.0797 L 285.6905,622.6417 L 282.3091,617.3498 L 278.7308,623.8307 L 275.372,622.088 L 271.2531,617.8613 L 267.6354,622.575 L 264.9514,622.6387 L 261.7909,617.6182 L 258.8556,622.5145 L 255.7633,622.1546 L 252.4034,616.7051 L 248.7306,627.0287 L 245.7697,619.7939 L 243.3033,617.3948 L 239.9428,625.3969 L 236.5762,621.5472 L 234.0911,617.8014 L 230.5112,623.9314 L 226.7251,620.0258 L 223.3724,618.9651 L 220.8342,627.0046 L 218.0916,619.2713 L 214.4873,623.4631 L 211.6729,621.2598 L 208.5323,617.836 L 206.3025,624.3823 L 202.8453,619.3797 L 199.9554,620.6811 L 197.5494,623.6572 L 194.6185,617.728 L 191.4821,624.5464 L 188.0364,619.936 L 184.9026,619.7255 L 182.1241,623.4279 L 179.9506,619.9184 L 177.071,619.9539 L 173.8415,621.7222 L 169.1257,623.3166 L 166.1133,620.5792 L 163.0601,620.1418 L 159.8819,621.497 L 157.3496,616.7289 L 153.8301,623.8151 L 151.4082,618.3424 L 148.2812,624.4842 L 145.1565,618.6231 L 141.7456,622.8334 L 137.4734,617.7409 L 132.991,622.1305 L 129.9579,619.1548 L 125.4581,618.402 L 122.3811,625.9448 L 119.5335,617.7327 L 116.4332,626.886 L 113.4086,617.4091 L 110.7122,623.8644 L 107.9292,618.0122 L 103.9973,619.4701 L 100.7409,623.754 L 96.41691,623.976 L 93.56117,623.0861 L 90.0,630.0 L 90.0,630.0 Z' /></g>-<g fill='#5b0991'>-<rect x='990.0' y='93.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='110.25' font-size='15.0' text-anchor='start'>ARR_WORDS</text>-<g fill='#3b8166'>-<rect x='990.0' y='127.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='144.0' font-size='15.0' text-anchor='start'>ghc-prim:GHC.Types.:</text>-<g fill='#e6564e'>-<rect x='990.0' y='160.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='177.75' font-size='15.0' text-anchor='start'>dfinity-radix-tree-0.3.1-Ch2JdNQi35N1NDZGT2tyvZ:DFINITY.RadixTree.Types.RadixNode</text>-<g fill='#fba63a'>-<rect x='990.0' y='194.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='211.5' font-size='15.0' text-anchor='start'>base:GHC.Base.Just</text>-<g fill='#bd9a53'>-<rect x='990.0' y='228.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='245.25' font-size='15.0' text-anchor='start'>bytestring-0.10.8.2:Data.ByteString.Short.Internal.SBS</text>-<g fill='#5d01a8'>-<rect x='990.0' y='262.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='279.0' font-size='15.0' text-anchor='start'>bytestring-0.10.8.2:Data.ByteString.Internal.PS</text>-<g fill='#7e1593'>-<rect x='990.0' y='295.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='312.75' font-size='15.0' text-anchor='start'>containers-0.5.11.0:Data.Map.Internal.Bin</text>-<g fill='#5a5ffc'>-<rect x='990.0' y='329.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='346.5' font-size='15.0' text-anchor='start'>THUNK_2_0</text>-<g fill='#c808c2'>-<rect x='990.0' y='363.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='380.25' font-size='15.0' text-anchor='start'>psqueues-0.2.7.0-61W4WPtGYUOI5ei0j8xe3i:Data.IntPSQ.Internal.Bin</text>-<g fill='#a23338'>-<rect x='990.0' y='397.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='414.0' font-size='15.0' text-anchor='start'>base:GHC.ForeignPtr.PlainPtr</text>-<g fill='#188b19'>-<rect x='990.0' y='430.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='447.75' font-size='15.0' text-anchor='start'>psqueues-0.2.7.0-61W4WPtGYUOI5ei0j8xe3i:Data.HashPSQ.Internal.B</text>-<g fill='#5e65cd'>-<rect x='990.0' y='464.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='481.5' font-size='15.0' text-anchor='start'>THUNK_1_0</text>-<g fill='#53cb86'>-<rect x='990.0' y='498.375' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='515.25' font-size='15.0' text-anchor='start'>THUNK</text>-<g fill='#39a6fa'>-<rect x='990.0' y='532.125' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='549.0' font-size='15.0' text-anchor='start'>dfinity-radix-tree-0.3.1-Ch2JdNQi35N1NDZGT2tyvZ:DFINITY.RadixTree.Types.RadixPrefix</text>-<g fill='#549a4a'>-<rect x='990.0' y='565.875' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='582.75' font-size='15.0' text-anchor='start'>STACK</text>-<g fill='#bf3725'>-<rect x='990.0' y='599.625' width='27.0' height='27.0' />-</g>-<text stroke='none' x='1023.75' y='616.5' font-size='15.0' text-anchor='start'>(trace elements)</text>-</g>-</g>-</svg>
dfinity-radix-tree.cabal view
@@ -1,5 +1,6 @@+Cabal-Version:      2.2 Name:               dfinity-radix-tree-Version:            0.5.2+Version:            0.6.0 Synopsis:           A generic data integrity layer. Description:    This library allows you to construct a Merkle tree on top of any underlying@@ -7,131 +8,116 @@    radix tree, which is well suited for storing large dictionaries of fairly    random keys, and is optimized for storing keys of the same length. -License:            GPL-3+License:            BSD-3-Clause License-File:       LICENSE Category:           Blockchain, DFINITY, Database-Copyright:          2018 DFINITY Stiftung+Copyright:          2018-2019 DFINITY Stiftung+Stability:          Stable Author:             Enzo Haussecker <enzo@dfinity.org>, Remy Goldschmidt <remy@dfinity.org>, Armando Ramirez <armando@dfinity.org> Maintainer:         Enzo Haussecker <enzo@dfinity.org>, Remy Goldschmidt <remy@dfinity.org>, Armando Ramirez <armando@dfinity.org>-Homepage:           https://github.com/dfinity-lab/dev-Bug-Reports:        https://github.com/dfinity-lab/dev/issues+Homepage:           https://dfinity.org Tested-With:        GHC==8.4.3, GHC==8.2.2 Build-Type:         Simple-Cabal-Version:      >= 1.10 Extra-Source-Files: CHANGELOG.md, README.md +Common generic+  Build-Depends:+    base >=4.10 && <5+  Default-Language:+    Haskell2010+  GHC-Options:+    -Wall+    -Wredundant-constraints+ Library-   Build-Depends:-      BoundedChan,-      base >=4.10 && <5,-      base16-bytestring,-      blake2,-      bloomfilter,-      bytestring,-      concurrent-extra,-      conduit,-      containers,-      data-default-class,-      deepseq,-      directory,-      dlist,-      ghc-prim,-      hashtables,-      lens-simple,-      leveldb-haskell,-      lmdb-simple,-      lrucaching,-      mtl,-      reducers,-      resourcet,-      semigroups,-      serialise,-      stm,-      temporary,-      transformers-   Default-Language:-      Haskell2010-   Exposed-Modules:-      DFINITY.RadixTree-      DFINITY.RadixTree.Conduit-   GHC-Options:-      -O2-      -Wall-      -fno-warn-missing-signatures-   HS-Source-Dirs:-      src-   Other-Modules:-      DFINITY.RadixTree.Bits-      DFINITY.RadixTree.Bloom-      DFINITY.RadixTree.Lenses-      DFINITY.RadixTree.Lock-      DFINITY.RadixTree.Memory-      DFINITY.RadixTree.Serialise-      DFINITY.RadixTree.Types-      DFINITY.RadixTree.Utilities+  Import:+    generic+  Build-Depends:+    BoundedChan,+    base16-bytestring,+    bytestring,+    concurrent-extra,+    conduit,+    containers,+    cryptonite,+    data-default-class,+    deepseq,+    directory,+    dlist,+    hashtables,+    lens-simple,+    leveldb-haskell,+    lrucaching,+    memory,+    mtl,+    reducers,+    resourcet,+    serialise,+    temporary,+    transformers+  Exposed-Modules:+    DFINITY.RadixTree+    DFINITY.RadixTree.Conduit+  HS-Source-Dirs:+    src+  Other-Modules:+    DFINITY.RadixTree.Bits+    DFINITY.RadixTree.Hash+    DFINITY.RadixTree.Lenses+    DFINITY.RadixTree.Lock+    DFINITY.RadixTree.Memory+    DFINITY.RadixTree.Serialise+    DFINITY.RadixTree.Types+    DFINITY.RadixTree.Utilities -Executable dfinity-radix-tree-benchmarks-   Build-Depends:-      base >=4.10 && <5,-      blake2,-      bytestring,-      cmdargs,-      criterion,-      data-default-class,-      dfinity-radix-tree,-      leveldb-haskell,-      lmdb-simple,-      resourcet,-      temporary-   Default-Language:-      Haskell2010-   GHC-Options:-      -O2-      -Wall-      -rtsopts-      -threaded-   HS-Source-Dirs:-      benchmark-   Main-Is:-      Main.hs+Executable dfinity-radix-tree-example+  Import:+    generic+  Build-Depends:+    base16-bytestring,+    bytestring,+    containers,+    dfinity-radix-tree+  HS-Source-Dirs:+    example+  Main-Is:+    Main.hs -test-suite tests-   Build-Depends:-      BoundedChan,-      QuickCheck,-      aeson,-      base >=4.10 && <5,-      base16-bytestring,-      blake2,-      bytestring,-      concurrent-extra,-      conduit,-      containers,-      dfinity-radix-tree,-      filepath,-      leveldb-haskell,-      mtl,-      resourcet,-      tasty,-      tasty-hunit,-      tasty-quickcheck,-      text,-      temporary,-      transformers,-      unordered-containers-   Default-Language:-      Haskell2010-   GHC-Options:-      -O2-      -Wall-   HS-Source-Dirs:-      test-   Main-Is:-      Tests.hs-   Other-Modules:-      Integrations,-      Properties,-      Types,-      Units-   Type:-      exitcode-stdio-1.0+Test-Suite dfinity-radix-tree-tests+  Import:+    generic+  Build-Depends:+    BoundedChan,+    QuickCheck,+    aeson,+    base16-bytestring,+    bytestring,+    clock,+    concurrent-extra,+    conduit,+    containers,+    cryptonite,+    dfinity-radix-tree,+    filepath,+    leveldb-haskell,+    memory,+    mtl,+    resourcet,+    tasty,+    tasty-hunit,+    tasty-quickcheck,+    temporary,+    text,+    transformers,+    unordered-containers+  HS-Source-Dirs:+    test+  Main-Is:+    Tests.hs+  Other-Modules:+    Integrations,+    Properties,+    Types,+    Units+  Type:+    exitcode-stdio-1.0
+ example/._Main.hs view

binary file changed (absent → 176 bytes)

+ example/Main.hs view
@@ -0,0 +1,56 @@+{-# LANGUAGE OverloadedStrings #-}++{-# OPTIONS -Wall #-}++import Control.Monad+import Data.ByteString.Base16+import Data.ByteString.Char8  as Strict+import Data.ByteString.Short+import Data.IORef+import Data.Map.Strict+import Text.Printf++import DFINITY.RadixTree++type SimpleTree = RadixTree (IORef (Map ByteString ByteString))++-- |+-- Demonstrate the radix tree structure.+main :: IO ()+main = do++  -- Create an empty radix tree.+  ref  <- newIORef mempty+  tree <- createRadixTree 2048 Nothing ref+  printf "Empty\n"+  printRadixTree tree++  -- Insert key-value pairs into the radix tree.+  tree' <- foldM+    step+    tree+    [ ("cat"       , "dog")+    , ("cats"      , "ends in s")+    , ("catalog"   , "extends cat")+    , ("catalogs"  , "ends in s")+    , ("cataloging", "ends in ing")+    ]++  -- Merkleize the radix tree.+  (root, tree'') <- merkleizeRadixTree tree'+  printf "Merkleize\n"+  printRadixTree tree''+  let pretty = show . encode . fromShort+  printf "state root = %s\n" $ pretty root++-- |+-- Insert a key-value pair into the radix tree.+step :: SimpleTree -> (ByteString, ByteString) -> IO SimpleTree+step tree (key, value) = do+  printf "Insert %s %s\n" key' value'+  tree' <- insertRadixTree key value tree+  printRadixTree tree'+  return tree'+ where+  key'   = show key+  value' = show value
+ src/DFINITY/._RadixTree.hs view

binary file changed (absent → 176 bytes)

src/DFINITY/RadixTree.hs view
@@ -1,911 +1,1142 @@-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE TupleSections #-}-{-# LANGUAGE ViewPatterns #-}--{-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}-{-# OPTIONS -fno-warn-unused-top-binds #-}---- |--- Module     : DFINITY.RadixTree--- Copyright  : 2018 DFINITY Stiftung--- License    : GPL-3--- Maintainer : Enzo Haussecker <enzo@dfinity.org>--- Stability  : Stable------ A generic data integrity layer.-module DFINITY.RadixTree (--   -- ** Class-     RadixDatabase(..)--   -- ** Types-   , RadixError(..)-   , RadixProof-   , RadixRoot-   , RadixTree--   -- ** Getters-   , getCheckpoint-   , getRoot-   , getValue--   -- ** Create-   , createRadixTree--   -- ** Insert-   , insertRadixTree--   -- ** Delete-   , deleteRadixTree--   -- ** Merkleize-   , merkleizeRadixTree--   -- ** Query-   , lookupRadixTree--   -- ** Prove-   , createRadixProof--   -- ** Verify-   , verifyRadixProof--   -- ** Test-   , isEmptyRadixTree-   , isValidRadixRoot--   -- ** Debug--   -- *** Contents-   , contentsRadixTree-   , contentsMerkleizedRadixTree-   , contentsNonMerkleizedRadixTree--   -- *** Print-   , printRadixTree-   , printMerkleizedRadixTree-   , printNonMerkleizedRadixTree--   ) where--import Control.Applicative ((<|>))-import Control.Exception (throw)-import Control.Monad (foldM, forM_, mfilter)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.Trans.Resource (ResourceT)-import Data.Bool (bool)-import Data.ByteString (ByteString)-import Data.ByteString.Short (fromShort)-import Data.Default.Class (def)-import Data.Functor(($>))-import Data.Functor.Reverse (Reverse(..))-import Data.Semigroup.Applicative (Ap(..))-import Data.List.NonEmpty (NonEmpty(..), fromList)-import Data.Maybe (fromJust, isJust, isNothing, listToMaybe)-import Data.Tuple (swap)--import qualified Data.BloomFilter as Bloom-import qualified Data.DList as DList-import qualified Data.List.NonEmpty as NonEmpty-import qualified Data.LruCache as LRU-import qualified Data.Map.Strict as Map-import qualified Database.LevelDB as LevelDB--import DFINITY.RadixTree.Bits-import DFINITY.RadixTree.Bloom-import DFINITY.RadixTree.Lenses-import DFINITY.RadixTree.Memory-import DFINITY.RadixTree.Types-import DFINITY.RadixTree.Utilities-------------------------------------------------------------------------------------- |--- Create a radix tree.-createRadixTree-   :: RadixDatabase m database-   => Int -- ^ Bloom filter size in bits.-   -> Int -- ^ LRU cache size in items.-   -> Maybe RadixRoot -- ^ Previous state root.-   -> database -- ^ Database.-   -> m (RadixTree database)-createRadixTree bloomSize cacheSize checkpoint database-   | bloomSize <= 0 = throw $ InvalidArgument "invalid Bloom filter size"-   | cacheSize <= 0 = throw $ InvalidArgument "invalid LRU cache size"-   | otherwise = do-      (root, cache') <--         case checkpoint of-            Nothing -> storeCold def cache database-            Just root -> do-               result <- loadCold root cache database-               case snd <$> result of-                  Nothing -> throw $ StateRootDoesNotExist root-                  Just cache' -> pure (root, cache')-      pure $ RadixTree bloom bloomSize Map.empty cache' cacheSize root database 0 root-      where-      bloom = emptyRadixBloom bloomSize-      cache = LRU.empty cacheSize--{-# SPECIALISE createRadixTree-               :: Int-               -> Int-               -> Maybe RadixRoot-               -> LevelDB.DB-               -> ResourceT IO (RadixTree LevelDB.DB) #-}-------------------------------------------------------------------------------------- |--- Check if a radix tree is empty.-isEmptyRadixTree-   :: RadixTree database -- ^ Radix tree.-   -> Bool-isEmptyRadixTree tree = _radixRoot tree == defaultRoot--{-# INLINABLE isEmptyRadixTree #-}-------------------------------------------------------------------------------------- |--- Check if a state root is valid.-isValidRadixRoot-   :: RadixDatabase m database-   => RadixRoot -- ^ State root.-   -> RadixTree database -- ^ Radix tree.-   -> m Bool-isValidRadixRoot root RadixTree {..} =-   isJust <$> load _radixDatabase key-   where-   key = fromShort root--{-# SPECIALISE isValidRadixRoot-               :: RadixRoot-               -> RadixTree LevelDB.DB-               -> ResourceT IO Bool #-}-------------------------------------------------------------------------------------- |--- Search for a value in a radix tree.-searchRadixTree-   :: RadixDatabase m database-   => Bool -- ^ Overwrite state root?-   -> (RadixTree database -> m (Maybe (RadixNode, RadixCache))) -- ^ Loading strategy.-   -> ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (Either RadixError RadixSearchResult)-searchRadixTree flag strategy = \ key tree@RadixTree {..} -> do-   let key' = toBits key-   let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag-   loop Nothing [] [] [] key' tree' where-   loop implicit roots nodes prefixes key tree@RadixTree {..} = do-      -- Load the root node.-      result <- strategy tree-      case result of-         Nothing -> pure $ Left $ StateRootDoesNotExist _radixRoot-         Just (node@RadixNode {..}, cache') -> do-            -- Calculate the prefix and overflow.-            let bits = maybe id (:) implicit $ maybe [] toBits _radixPrefix-            let prefix = matchBits bits key-            let n = length prefix-            let overflow = drop n bits-            -- Update the accumulators.-            let roots' = _radixRoot:roots-            let nodes' = node:nodes-            let prefixes' = prefix:prefixes-            let key' = drop n key-            -- Check the termination criteria.-            let residue = not $ null overflow-            let bit = head key'-            let child = bool _radixLeft _radixRight bit-            if null key' || residue || isNothing child-            then pure $ Right (fromList roots', fromList nodes', fromList prefixes', overflow, key', cache')-            else do-               -- Recurse.-               let root' = fromJust child-               let tree' = setCache cache' $ setRoot root' tree-               let implicit' = Just bit-               loop implicit' roots' nodes' prefixes' key' tree'--{-# SPECIALISE searchRadixTree-               :: Bool-               -> (RadixTree LevelDB.DB-                  -> ResourceT IO (Maybe (RadixNode, RadixCache)))-               -> ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (Either RadixError RadixSearchResult) #-}-------------------------------------------------------------------------------------- |--- Search for a value in a Merkleized radix tree.-searchMerkleizedRadixTree-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (Either RadixError RadixSearchResult)-searchMerkleizedRadixTree =-   searchRadixTree True $ \ RadixTree {..} ->-      loadCold _radixRoot _radixCache _radixDatabase--{-# SPECIALISE searchMerkleizedRadixTree-               :: ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (Either RadixError RadixSearchResult) #-}-------------------------------------------------------------------------------------- |--- Search for a value in a non-Merkleized radix tree.-searchNonMerkleizedRadixTree-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (Either RadixError RadixSearchResult)-searchNonMerkleizedRadixTree =-   searchRadixTree False $ \ RadixTree {..} ->-      loadHot _radixRoot _radixBuffer _radixCache _radixDatabase--{-# SPECIALISE searchNonMerkleizedRadixTree-               :: ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (Either RadixError RadixSearchResult) #-}-------------------------------------------------------------------------------------- |--- Insert a value into a radix tree.-insertRadixTree-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> m (RadixTree database)-insertRadixTree key value tree =-   if isEmptyRadixTree tree-   then pure $ initializeRadixTree key value tree-   else searchNonMerkleizedRadixTree key tree >>= \ case-      Left err -> throw err-      Right result@(_, _, _, [], [], _) ->-         pure $ insertRadixTreeAt result value tree-      Right result@(_, _, _, [], _, _) ->-         pure $ insertRadixTreeAfter result value tree-      Right result@(_, _, _, _, [], _) ->-         pure $ insertRadixTreeBefore result value tree-      Right result ->-         pure $ insertRadixTreeBetween result value tree--{-# SPECIALISE insertRadixTree-               :: ByteString-               -> ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (RadixTree LevelDB.DB) #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-initializeRadixTree-   :: ByteString -- ^ Key.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-initializeRadixTree key value tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setNonce nonce $ setRoot root tree-   where-   prefix = createPrefix $ toBits key-   node = setPrefix prefix $ Just value `setLeaf` def-   root = createRootFromNonce _radixNonce-   bloom = Bloom.insert root _radixBloom-   nonce = _radixNonce + 1-   buffer = storeHot root node _radixBuffer--{-# INLINABLE initializeRadixTree #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-insertRadixTreeAt-   :: RadixSearchResult -- ^ Search result.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-insertRadixTreeAt (_:|roots, node:|nodes, prefix:|_, _, _, cache) value tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   node' = Just value `setLeaf` node-   root' = createRootFromNonce _radixNonce-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root':roots-   buffer = merkleSpoof root' parent $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 1-   state = bool _radixRoot root' $ isNothing parent--{-# INLINABLE insertRadixTreeAt #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-insertRadixTreeAfter-   :: RadixSearchResult -- ^ Search result.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-insertRadixTreeAfter (_:|roots, node:|nodes, prefix:|_, _, keyOverflow, cache) value tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   prefix' = createPrefix $ drop 1 keyOverflow-   node' = setPrefix prefix' $ Just value `setLeaf` def-   root' = createRootFromNonce _radixNonce-   node'' = test `setChild` Just root' $ node-   root'' = createRootFromNonce $ _radixNonce + 1-   test = head keyOverflow-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root'':root':roots-   buffer = merkleSpoof root'' parent $ storeHot root'' node'' $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 2-   state = bool _radixRoot root'' $ isNothing parent--{-# INLINABLE insertRadixTreeAfter #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-insertRadixTreeBefore-   :: RadixSearchResult -- ^ Search result.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-insertRadixTreeBefore (_:|roots, node:|nodes, prefix:|_, prefixOverflow, _, cache) value tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   prefix' = createPrefix $ drop 1 prefixOverflow-   node' = setPrefix prefix' node-   root' = createRootFromNonce _radixNonce-   prefix'' = createPrefix $ drop 1 prefix `bool` prefix $ isNothing parent-   node'' = setPrefix prefix'' $ test `setChild` Just root' $ Just value `setLeaf` def-   root'' = createRootFromNonce $ _radixNonce + 1-   test = head prefixOverflow-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root'':root':roots-   buffer = merkleSpoof root'' parent $ storeHot root'' node'' $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 2-   state = bool _radixRoot root'' $ isNothing parent--{-# INLINABLE insertRadixTreeBefore #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-insertRadixTreeBetween-   :: RadixSearchResult -- ^ Search result.-   -> ByteString -- ^ Value.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-insertRadixTreeBetween (_:|roots, node:|nodes, prefix:|_, prefixOverflow, keyOverflow, cache) value tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   prefix' = createPrefix $ drop 1 keyOverflow-   node' = setPrefix prefix' $ Just value `setLeaf` def-   root' = createRootFromNonce _radixNonce-   prefix'' = createPrefix $ drop 1 prefixOverflow-   node'' = setPrefix prefix'' node-   root'' = createRootFromNonce $ _radixNonce + 1-   prefix''' = createPrefix $ drop 1 prefix `bool` prefix $ isNothing parent-   node''' = setPrefix prefix''' $ setChildren children def-   root''' = createRootFromNonce $ _radixNonce + 2-   test = head keyOverflow-   children = bool id swap test (Just root', Just root'')-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root''':root'':root':roots-   buffer = merkleSpoof root''' parent $ storeHot root''' node''' $ storeHot root'' node'' $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 3-   state = bool _radixRoot root''' $ isNothing parent--{-# INLINABLE insertRadixTreeBetween #-}-------------------------------------------------------------------------------------- |--- Delete a value from a radix tree.-deleteRadixTree-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (RadixTree database)-deleteRadixTree key tree@RadixTree {..} =-   if isEmptyRadixTree tree-   then pure tree-   else searchNonMerkleizedRadixTree key tree >>= \ case-      Left err -> throw err-      Right result@(_, nodes, prefix:|_, [], [], cache) ->-         case nodes of-            -- No children and no parent.-            RadixNode _ Nothing Nothing _:|[] ->-               pure $ deleteRadixTreeNoChildrenNoParent result tree-            -- No children and parent with leaf.-            RadixNode _ Nothing Nothing _:|parent:_ | isJust $ getLeaf parent ->-               pure $ deleteRadixTreeNoChildrenParentWithLeaf result tree-            -- No children and parent without leaf.-            RadixNode _ Nothing Nothing _:|parent:_ -> do-               let test = not $ head prefix-               let root = fromJust $ getChild test parent-               loadHot root _radixBuffer cache _radixDatabase >>= \ case-                  Nothing -> throw $ StateRootDoesNotExist root-                  Just (node, cache') ->-                     pure $ deleteRadixTreeNoChildrenParentWithoutLeaf result node cache' test tree-            -- One left child.-            RadixNode _ child Nothing _:|_ | isJust child -> do-               let test = False-               let root = fromJust child-               loadHot root _radixBuffer cache _radixDatabase >>= \ case-                  Nothing -> throw $ StateRootDoesNotExist root-                  Just (node, cache') ->-                     pure $ deleteRadixTreeOneChild result node cache' test tree-            -- One right child.-            RadixNode _ Nothing child _:|_ | isJust child -> do-               let test = True-               let root = fromJust child-               loadHot root _radixBuffer cache _radixDatabase >>= \ case-                  Nothing -> throw $ StateRootDoesNotExist root-                  Just (node, cache') ->-                     pure $ deleteRadixTreeOneChild result node cache' test tree-            -- Two children.-            _ -> pure $ deleteRadixTreeTwoChildren result tree-      Right _ -> pure tree--{-# SPECIALISE deleteRadixTree-               :: ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (RadixTree LevelDB.DB) #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-deleteRadixTreeNoChildrenNoParent-   :: RadixSearchResult -- ^ Search result.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-deleteRadixTreeNoChildrenNoParent (_, _, _, _, _, cache) tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setRoot state tree-   where-   bloom = Bloom.insert defaultRoot _radixBloom-   buffer = storeHot defaultRoot def _radixBuffer-   state = defaultRoot--{-# INLINABLE deleteRadixTreeNoChildrenNoParent #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-deleteRadixTreeNoChildrenParentWithLeaf-   :: RadixSearchResult -- ^ Search result.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-deleteRadixTreeNoChildrenParentWithLeaf (_:|_:roots, _:|node:nodes, prefix:|prefixes, _, _, cache) tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   node' = setChild test Nothing node-   root' = createRootFromNonce _radixNonce-   test = head prefix-   parent = listToMaybe $ zip3 roots nodes $ map head prefixes-   bloom = flip Bloom.insertList _radixBloom $ root':roots-   buffer = merkleSpoof root' parent $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 1-   state = bool _radixRoot root' $ isNothing parent-deleteRadixTreeNoChildrenParentWithLeaf _ _ =-   throw $ InvalidArgument "unknown parent"--{-# INLINABLE deleteRadixTreeNoChildrenParentWithLeaf #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-deleteRadixTreeNoChildrenParentWithoutLeaf-   :: RadixSearchResult -- ^ Search result.-   -> RadixNode -- ^ Radix node.-   -> RadixCache -- ^ Radix cache.-   -> Bool -- ^ Lineage.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-deleteRadixTreeNoChildrenParentWithoutLeaf (_:|_:roots, _:|_:nodes, _:|prefixes, _, _, _) node@RadixNode {..} cache test tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   prefix' = createPrefix $ drop 1 bits `bool` bits $ isNothing parent-   node' = setPrefix prefix' node-   root' = createRootFromNonce _radixNonce-   bits = head prefixes ++ test:maybe [] toBits _radixPrefix-   parent = listToMaybe $ zip3 roots nodes $ map head prefixes-   bloom = flip Bloom.insertList _radixBloom $ root':roots-   buffer = merkleSpoof root' parent $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 1-   state = bool _radixRoot root' $ isNothing parent-deleteRadixTreeNoChildrenParentWithoutLeaf _ _ _ _ _ =-   throw $ InvalidArgument "unknown parent"--{-# INLINABLE deleteRadixTreeNoChildrenParentWithoutLeaf #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-deleteRadixTreeOneChild-   :: RadixSearchResult -- ^ Search result.-   -> RadixNode -- ^ Radix node.-   -> RadixCache -- ^ Radix cache.-   -> Bool -- ^ Lineage.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-deleteRadixTreeOneChild (_:|roots, _:|nodes, prefix:|_, _, _, _) node@RadixNode {..} cache test tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   prefix' = createPrefix $ drop 1 bits `bool` bits $ isNothing parent-   node' = setPrefix prefix' node-   root' = createRootFromNonce _radixNonce-   bits = prefix ++ test:maybe [] toBits _radixPrefix-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root':roots-   buffer = merkleSpoof root' parent $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 1-   state = bool _radixRoot root' $ isNothing parent--{-# INLINABLE deleteRadixTreeOneChild #-}-------------------------------------------------------------------------------------- TODO (enzo): Documentation.-deleteRadixTreeTwoChildren-   :: RadixSearchResult -- ^ Search result.-   -> RadixTree database -- ^ Radix tree.-   -> RadixTree database-deleteRadixTreeTwoChildren (_:|roots, node:|nodes, prefix:|_, _, _, cache) tree@RadixTree {..} =-   seq bloom $ setBloom bloom $ setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree-   where-   node' = setLeaf Nothing node-   root' = createRootFromNonce _radixNonce-   parent = listToMaybe $ zip3 roots nodes prefix-   bloom = flip Bloom.insertList _radixBloom $ root':roots-   buffer = merkleSpoof root' parent $ storeHot root' node' _radixBuffer-   nonce = _radixNonce + 1-   state = bool _radixRoot root' $ isNothing parent--{-# INLINABLE deleteRadixTreeTwoChildren #-}-------------------------------------------------------------------------------------- |--- Lookup a value in a radix tree.-lookupRadixTree-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (Maybe (ByteString, RadixTree database))-lookupRadixTree key tree = do-   found <- searchNonMerkleizedRadixTree key tree-   case found of-      Left err -> throw err-      Right (_, RadixNode {..}:|_, _, prefixOverflow, keyOverflow, cache') ->-         if not $ null prefixOverflow && null keyOverflow-         then pure Nothing-         else pure $ do-            value <- _radixLeaf-            let tree' = setCache cache' tree-            pure (value, tree')--{-# SPECIALISE lookupRadixTree-               :: ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (Maybe (ByteString, RadixTree LevelDB.DB)) #-}-------------------------------------------------------------------------------------- |--- Prove that a value exists in a radix tree.-createRadixProof-   :: RadixDatabase m database-   => ByteString -- ^ Key.-   -> RadixTree database -- ^ Radix tree.-   -> m (Maybe (RadixProof, RadixTree database))-createRadixProof key tree = do-   found <- searchMerkleizedRadixTree key tree-   case found of-      Left err -> throw err-      Right (_, path, _, prefixOverflow, keyOverflow, cache') ->-         if not $ null prefixOverflow && null keyOverflow-         then pure Nothing-         else pure $ do-            value <- _radixLeaf $ NonEmpty.head path-            let tree' = setCache cache' tree-            let leaf' = setLeaf Nothing $ NonEmpty.head path-            let path' = leaf' :| NonEmpty.tail path-            let proof = RadixProof path' value-            pure (proof, tree')--{-# SPECIALISE createRadixProof-               :: ByteString-               -> RadixTree LevelDB.DB-               -> ResourceT IO (Maybe (RadixProof, RadixTree LevelDB.DB)) #-}-------------------------------------------------------------------------------------- |--- Verify that a value exists in a radix tree.-verifyRadixProof-   :: ByteString -- ^ Key.-   -> RadixRoot -- ^ State root.-   -> RadixProof -- ^ Radix proof.-   -> Bool-verifyRadixProof key rootHash (includeValue -> RadixProof{..}) =-  validateKey && validateHashes-  where-    -- Validate the proof is for the value at the given key &-    -- validate that the hashes are correct (both state root matches-    -- and that child hashes are found in their parents)-    (validateKey, validateHashes) = maybe (False, False) id $ do-      keyBits <- recoverKey-      let root = NonEmpty.last _radixPath-      pure $ (keyBits == toBits key, createRoot root == rootHash)--    recoverKey = do-      let childParents =-            zip (NonEmpty.toList  _radixPath) (NonEmpty.tail _radixPath)-      leaflessBits <- getAp $ foldMap (Ap . recoverBits) (Reverse childParents)-      let keyBits = leaflessBits <> DList.fromList (getPrefixBits proofLeaf)-      pure $ DList.toList keyBits--    getPrefixBits = maybe [] toBits . _radixPrefix--    proofLeaf = NonEmpty.head _radixPath--    -- Recovering the prefix necessitates us validating the child/parent-    -- hashes. This is because we must find use the child's hash to-    -- decide if the implicit bit is 0 or 1-    recoverBits (child, parent) = do-      let prefixBits = maybe [] toBits (_radixPrefix parent)-          childHash = createRoot child-          implicit0 = mfilter (== childHash) (_radixLeft parent) $> False-          implicit1 = mfilter (== childHash) (_radixRight parent) $> True--      -- This returning Nothing means we could not validate child/parent-      implicit <- implicit0 <|> implicit1--      pure $ DList.fromList prefixBits <> DList.singleton implicit---- Add the missing leaf value to _radixPath-includeValue :: RadixProof -> RadixProof-includeValue RadixProof{..} = RadixProof-  { _radixPath =-      setLeaf (Just _radixValue) (NonEmpty.head _radixPath)-      :| NonEmpty.tail _radixPath-  , _radixValue = _radixValue-  }-------------------------------------------------------------------------------------- |--- Mask a node in a Merkleized radix tree.-merkleSpoof-   :: RadixRoot -- ^ State root.-   -> Maybe (RadixRoot, RadixNode, Bool) -- ^ Parent.-   -> RadixBuffer -- ^ Buffer.-   -> RadixBuffer-merkleSpoof mask = \ case-   Nothing -> id-   Just (root, node, test) ->-      storeHot root $ test `setChild` Just mask $ node--{-# INLINABLE merkleSpoof #-}-------------------------------------------------------------------------------------- |--- Merkleize a radix tree. This will flush the buffer to the database.-merkleizeRadixTree-   :: RadixDatabase m database-   => RadixTree database-- ^ Radix tree.-   -> m (RadixRoot, RadixTree database)-merkleizeRadixTree RadixTree {..} = do-   (root, cache) <- loop _radixRoot _radixCache-   let tree = RadixTree bloom _radixBloomSize Map.empty cache _radixCacheSize root _radixDatabase 0 root-   pure (root, tree)-   where-   bloom = emptyRadixBloom _radixBloomSize-   loop root cache =-      if not $ Bloom.elem root _radixBloom-      then pure (root, cache)-      else do-         -- Load the root node.-         result <- loadHot root _radixBuffer cache _radixDatabase-         case result of-            Nothing -> throw $ StateRootDoesNotExist root-            Just (node@RadixNode {..}, cache') ->-               case (_radixLeft, _radixRight) of-                  -- No children.-                  (Nothing, Nothing) ->-                     storeCold node cache' _radixDatabase-                  -- One left child.-                  (Just child, Nothing) -> do-                     (root', cache'') <- loop child cache'-                     let node' = False `setChild` Just root' $ node-                     storeCold node' cache'' _radixDatabase-                  -- One right child.-                  (Nothing, Just child) -> do-                     (root', cache'') <- loop child cache'-                     let node' = True `setChild` Just root' $ node-                     storeCold node' cache'' _radixDatabase-                  -- Two children.-                  (Just left, Just right) -> do-                     (root', cache'') <- loop left cache'-                     (root'', cache''') <- loop right cache''-                     let node' = setChildren (Just root', Just root'') node-                     storeCold node' cache''' _radixDatabase--{-# SPECIALISE merkleizeRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO (RadixRoot, RadixTree LevelDB.DB) #-}-------------------------------------------------------------------------------------- |--- Get the contents of a radix tree.-contentsRadixTree'-   :: RadixDatabase m database-   => Bool -- ^ Overwrite state root?-   -> (RadixTree database -> m (Maybe (RadixNode, RadixCache))) -- ^ Loading strategy.-   -> RadixTree database -- ^ Radix tree.-   -> m [(ByteString, ByteString)]-contentsRadixTree' flag strategy = \ tree@RadixTree {..} -> do-   let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag-   loop tree' [] [] where-   loop tree@RadixTree {..} prefix accum = do-      result <- strategy tree-      case fst <$> result of-         Nothing -> throw $ StateRootDoesNotExist _radixRoot-         Just RadixNode {..} -> do-            let prefix' = prefix ++ maybe [] toBits _radixPrefix-            let key = fromBits prefix'-            let accum' = maybe accum (\ value -> (key, value):accum) _radixLeaf-            let children = [(,False) <$> _radixLeft, (,True) <$> _radixRight]-            flip foldM accum' `flip` children $ \ accum'' -> \ case-               Nothing -> pure accum''-               Just (root, test) -> do-                  let tree' = setRoot root tree-                  let prefix'' = prefix' ++ [test]-                  loop tree' prefix'' accum''--{-# SPECIALISE contentsRadixTree'-               :: Bool-               -> (RadixTree LevelDB.DB-                  -> ResourceT IO (Maybe (RadixNode, RadixCache)))-               -> RadixTree LevelDB.DB-               -> ResourceT IO [(ByteString, ByteString)] #-}-------------------------------------------------------------------------------------- |--- A convenient alias for `contentsNonMerkleizedRadixTree`.-contentsRadixTree-   :: RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m [(ByteString, ByteString)]-contentsRadixTree = contentsNonMerkleizedRadixTree--{-# SPECIALISE contentsRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO [(ByteString, ByteString)] #-}-------------------------------------------------------------------------------------- |--- Get the contents of a Merkleized radix tree.-contentsMerkleizedRadixTree-   :: RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m [(ByteString, ByteString)]-contentsMerkleizedRadixTree =-   contentsRadixTree' True $ \ RadixTree {..} ->-      loadCold _radixRoot _radixCache _radixDatabase--{-# SPECIALISE contentsMerkleizedRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO [(ByteString, ByteString)] #-}-------------------------------------------------------------------------------------- |--- Get the contents of a non-Merkleized radix tree.-contentsNonMerkleizedRadixTree-   :: RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m [(ByteString, ByteString)]-contentsNonMerkleizedRadixTree =-   contentsRadixTree' False $ \ RadixTree {..} ->-      loadHot _radixRoot _radixBuffer _radixCache _radixDatabase--{-# SPECIALISE contentsNonMerkleizedRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO [(ByteString, ByteString)] #-}-------------------------------------------------------------------------------------- |--- Print a radix tree.-printRadixTree'-   :: MonadIO m-   => RadixDatabase m database-   => Bool -- ^ Overwrite state root?-   -> (RadixTree database -> m (Maybe (RadixNode, RadixCache))) -- ^ Loading strategy.-   -> RadixTree database -- ^ Radix tree.-   -> m ()-printRadixTree' flag strategy = \ tree@RadixTree {..} -> do-   let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag-   loop tree' 0 where-   loop tree@RadixTree {..} i = do-      result <- strategy tree-      case fst <$> result of-         Nothing -> throw $ StateRootDoesNotExist _radixRoot-         Just node@RadixNode {..} -> do-            let indent = (++) $ concat $ replicate i "|"-            liftIO $ putStrLn $ indent $ show node-            let j = i + 1-            forM_ [_radixLeft, _radixRight] $ \ case-               Nothing -> pure ()-               Just root -> setRoot root tree `loop` j--{-# SPECIALISE printRadixTree'-               :: Bool-               -> (RadixTree LevelDB.DB-                  -> ResourceT IO (Maybe (RadixNode, RadixCache)))-               -> RadixTree LevelDB.DB-               -> ResourceT IO () #-}-------------------------------------------------------------------------------------- |--- A convenient alias for `printNonMerkleizedRadixTree`.-printRadixTree-   :: MonadIO m-   => RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m ()-printRadixTree = printNonMerkleizedRadixTree--{-# SPECIALISE printRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO () #-}-------------------------------------------------------------------------------------- |--- Print a Merkleized radix tree.-printMerkleizedRadixTree-   :: MonadIO m-   => RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m ()-printMerkleizedRadixTree =-   printRadixTree' True $ \ RadixTree {..} ->-      loadCold _radixRoot _radixCache _radixDatabase--{-# SPECIALISE printMerkleizedRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO () #-}-------------------------------------------------------------------------------------- |--- Print a non-Merkleized radix tree.-printNonMerkleizedRadixTree-   :: MonadIO m-   => RadixDatabase m database-   => RadixTree database -- ^ Radix tree.-   -> m ()-printNonMerkleizedRadixTree =-   printRadixTree' False $ \ RadixTree {..} ->-      loadHot _radixRoot _radixBuffer _radixCache _radixDatabase--{-# SPECIALISE printNonMerkleizedRadixTree-               :: RadixTree LevelDB.DB-               -> ResourceT IO () #-}----------------------------------------------------------------------------------+{-# LANGUAGE ExplicitForAll  #-}+{-# LANGUAGE LambdaCase      #-}+{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE TupleSections   #-}+{-# LANGUAGE ViewPatterns    #-}++{-# OPTIONS -Wall                 #-}+{-# OPTIONS -Wno-unused-top-binds #-}++-- |+-- Module     : DFINITY.RadixTree+-- Copyright  : 2018-2019 DFINITY Stiftung+-- License    : BSD-3-Clause+-- Maintainer : Enzo Haussecker <enzo@dfinity.org>+-- Stability  : Stable+--+-- A generic data integrity layer.+module DFINITY.RadixTree+  (++  -- ** Class+    RadixDatabase(..)++  -- ** Types+  , RadixError(..)+  , RadixProof+  , RadixRoot+  , RadixTree++  -- ** Getters+  , getCheckpoint+  , getValue++  -- ** Create+  , createRadixTree++  -- ** Insert+  , insertRadixTree++  -- ** Delete+  , deleteRadixTree++  -- ** Merkleize+  , merkleizeRadixTree++  -- ** Query+  , lookupRadixTree++  -- ** Prove+  , createRadixProof++  -- ** Verify+  , verifyRadixProof++  -- ** Test+  , isEmptyRadixTree+  , isValidRadixRoot++  -- ** Subtrees+  , subtreeRadixTree++  -- ** Debug++   -- *** Contents+  , contentsRadixTree+  , contentsMerkleizedRadixTree+  , contentsNonMerkleizedRadixTree++   -- *** Draw+  , drawRadixTree+  , drawMerkleizedRadixTree+  , drawNonMerkleizedRadixTree++   -- *** Print+  , printRadixTree+  , printMerkleizedRadixTree+  , printNonMerkleizedRadixTree+  )+where++import Control.Applicative+import Control.Exception+import Control.Monad+import Control.Monad.IO.Class+import Control.Monad.Trans.Resource+import Data.Bool+import Data.ByteString.Base16       as Base16+import Data.ByteString.Char8        as Strict+import Data.ByteString.Short        as Short+import Data.Default.Class+import Data.DList                   as DList+import Data.Functor+import Data.Functor.Reverse+import Data.List                    as List+import Data.List.NonEmpty           as NonEmpty+import Data.LruCache                as LRU+import Data.Map.Strict              as Map+import Data.Maybe+import Data.Semigroup.Applicative+import Data.Tuple+import Data.Word+import Database.LevelDB             as LevelDB+import System.IO                    as IO++import DFINITY.RadixTree.Bits+import DFINITY.RadixTree.Lenses+import DFINITY.RadixTree.Memory+import DFINITY.RadixTree.Types+import DFINITY.RadixTree.Utilities++--------------------------------------------------------------------------------++-- |+-- Create a radix tree.+createRadixTree+  :: RadixDatabase m database+  => Int+  -- ^ Cache size.+  -> Maybe RadixRoot+  -- ^ State root.+  -> database+  -- ^ Database.+  -> m (RadixTree database)+createRadixTree cacheSize checkpoint database+  | cacheSize <= 0 = throw $ InvalidArgument "invalid LRU cache size"+  | otherwise = do+    (root, cache') <- case checkpoint of+      Nothing -> do+        storeCold def cache database+      Just root -> do+        result <- loadCold root cache database+        case snd <$> result of+          Nothing -> do+            throw $ StateRootDoesNotExist root+          Just cache' -> do+            return (root, cache')+    return $ RadixTree mempty cache' cacheSize root database 0 root+  where cache = LRU.empty cacheSize++{-# SPECIALISE createRadixTree+  :: Int+  -> Maybe RadixRoot+  -> LevelDB.DB+  -> ResourceT IO (RadixTree LevelDB.DB) #-}++--------------------------------------------------------------------------------++-- |+-- Search for a value in a radix tree.+searchRadixTree+  :: RadixDatabase m database+  => Bool+  -- ^ Overwrite state root?+  -> (RadixTree database -> m (Maybe (RadixNode, RadixCache)))+  -- ^ Loading strategy.+  -> ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Either RadixError RadixSearchResult)+searchRadixTree flag strategy = \key tree@RadixTree {..} -> do+  let key'  = toBits key+  let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag+  loop Nothing [] [] [] key' tree'+ where++  -- Loop.+  loop implicit roots nodes prefixes key tree@RadixTree {..} = do++    -- Load the root node.+    result <- strategy tree+    case result of+      Nothing -> do+        return $ Left $ StateRootDoesNotExist _radixRoot+      Just (node@RadixNode {..}, cache') -> do++        -- Calculate the matching prefix and overflow bits.+        let bits = maybe id (:) implicit $ maybe [] toBits _radixPrefix+        let prefix    = matchBits bits key+        let n         = List.length prefix+        let overflow  = List.drop n bits+        let residue   = not $ List.null overflow++        -- Update the accumulators.+        let roots'    = _radixRoot : roots+        let nodes'    = node : nodes+        let prefixes' = prefix : prefixes+        let key'      = List.drop n key++        -- Check the termination criteria.+        let bit       = List.head key'+        let child     = bool _radixLeft _radixRight bit+        if List.null key' || residue || isNothing child++          -- Terminate.+          then return $ Right+            ( NonEmpty.fromList roots'+            , NonEmpty.fromList nodes'+            , NonEmpty.fromList prefixes'+            , overflow+            , key'+            , cache'+            )++          -- Recurse.+          else do+            let root'     = fromJust child+            let tree'     = setCache cache' $ setRoot root' tree+            let implicit' = Just bit+            loop implicit' roots' nodes' prefixes' key' tree'++{-# SPECIALISE searchRadixTree+  :: Bool+  -> (RadixTree LevelDB.DB -> ResourceT IO (Maybe (RadixNode, RadixCache)))+  -> ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Either RadixError RadixSearchResult) #-}++--------------------------------------------------------------------------------++-- |+-- Search for a value in a Merkleized radix tree.+searchMerkleizedRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Either RadixError RadixSearchResult)+searchMerkleizedRadixTree = do+  searchRadixTree True $ \RadixTree {..} -> do+    loadCold _radixRoot _radixCache _radixDatabase++{-# SPECIALISE searchMerkleizedRadixTree+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Either RadixError RadixSearchResult) #-}++--------------------------------------------------------------------------------++-- |+-- Search for a value in a non-Merkleized radix tree.+searchNonMerkleizedRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Either RadixError RadixSearchResult)+searchNonMerkleizedRadixTree = do+  searchRadixTree False $ \RadixTree {..} -> do+    loadHot _radixRoot _radixBuffer _radixCache _radixDatabase++{-# SPECIALISE searchNonMerkleizedRadixTree+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Either RadixError RadixSearchResult) #-}++--------------------------------------------------------------------------------++-- |+-- Insert a value into a radix tree.+insertRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (RadixTree database)+insertRadixTree key value tree = if isEmptyRadixTree tree+  then return $ initializeRadixTree key value tree+  else searchNonMerkleizedRadixTree key tree >>= \case+    Left err -> throw err+    Right result@(_, _, _, [], [], _) ->+      return $ insertRadixTreeAt result value tree+    Right result@(_, _, _, [], _, _) ->+      return $ insertRadixTreeAfter result value tree+    Right result@(_, _, _, _, [], _) ->+      return $ insertRadixTreeBefore result value tree+    Right result -> return $ insertRadixTreeBetween result value tree++{-# SPECIALISE insertRadixTree+  :: ByteString+  -> ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (RadixTree LevelDB.DB) #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+initializeRadixTree+  :: ByteString+  -- ^ Key.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+initializeRadixTree key value tree@RadixTree {..} =+  setBuffer buffer $ setNonce nonce $ setRoot root tree+ where+  prefix = createPrefix $ toBits key+  root   = createRootFromNonce _radixNonce+  node   = setPrefix prefix $ Just value `setLeaf` def+  buffer = Map.insert root node _radixBuffer+  nonce  = _radixNonce + 1++{-# INLINABLE initializeRadixTree #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+insertRadixTreeAt+  :: RadixSearchResult+  -- ^ Search result.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+insertRadixTreeAt (root :| roots, node :| nodes, prefix :| prefixes, _, _, cache) value tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  root'   = createRootFromNonce _radixNonce+  node'   = Just value `setLeaf` node+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 1+  (,,) buffer nonce state =+    merkleSpoof parents root' counter $ Map.insert root' node' $ Map.delete+      root+      _radixBuffer++{-# INLINABLE insertRadixTreeAt #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+insertRadixTreeAfter+  :: RadixSearchResult+  -- ^ Search result.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+insertRadixTreeAfter (root :| roots, node :| nodes, prefix :| prefixes, _, keyOverflow, cache) value tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  prefix' = createPrefix $ List.drop 1 keyOverflow+  root'   = createRootFromNonce _radixNonce+  node'   = setPrefix prefix' $ Just value `setLeaf` def+  root''  = createRootFromNonce $ _radixNonce + 1+  node''  = test `setChild` Just root' $ node+  test    = List.head keyOverflow+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 2+  (,,) buffer nonce state =+    merkleSpoof parents root'' counter+      $ Map.insert root'' node''+      $ Map.insert root' node'+      $ Map.delete root _radixBuffer++{-# INLINABLE insertRadixTreeAfter #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+insertRadixTreeBefore+  :: RadixSearchResult+  -- ^ Search result.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+insertRadixTreeBefore (root :| roots, node :| nodes, prefix :| prefixes, prefixOverflow, _, cache) value tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  prefix' = createPrefix $ List.drop 1 prefixOverflow+  root'   = createRootFromNonce _radixNonce+  node'   = setPrefix prefix' node+  prefix'' =+    createPrefix $ List.drop 1 prefix `bool` prefix $ List.null parents+  root'' = createRootFromNonce $ _radixNonce + 1+  node'' =+    setPrefix prefix'' $ test `setChild` Just root' $ Just value `setLeaf` def+  test    = List.head prefixOverflow+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 2+  (,,) buffer nonce state =+    merkleSpoof parents root'' counter+      $ Map.insert root'' node''+      $ Map.insert root' node'+      $ Map.delete root _radixBuffer++{-# INLINABLE insertRadixTreeBefore #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+insertRadixTreeBetween+  :: RadixSearchResult+  -- ^ Search result.+  -> ByteString+  -- ^ Value.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+insertRadixTreeBetween (root :| roots, node :| nodes, prefix :| prefixes, prefixOverflow, keyOverflow, cache) value tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  prefix'  = createPrefix $ List.drop 1 keyOverflow+  root'    = createRootFromNonce _radixNonce+  node'    = setPrefix prefix' $ Just value `setLeaf` def+  prefix'' = createPrefix $ List.drop 1 prefixOverflow+  root''   = createRootFromNonce $ _radixNonce + 1+  node''   = setPrefix prefix'' node+  prefix''' =+    createPrefix $ List.drop 1 prefix `bool` prefix $ List.null parents+  root'''  = createRootFromNonce $ _radixNonce + 2+  node'''  = setPrefix prefix''' $ setChildren children def+  test     = List.head keyOverflow+  children = bool id swap test (Just root', Just root'')+  parents  = createParents roots nodes prefix prefixes+  counter  = _radixNonce + 3+  (,,) buffer nonce state =+    merkleSpoof parents root''' counter+      $ Map.insert root''' node'''+      $ Map.insert root'' node''+      $ Map.insert root' node'+      $ Map.delete root _radixBuffer++{-# INLINABLE insertRadixTreeBetween #-}++--------------------------------------------------------------------------------++-- |+-- Delete a value from a radix tree.+deleteRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (RadixTree database)+deleteRadixTree key tree@RadixTree {..} = if isEmptyRadixTree tree+  then return tree+  else searchNonMerkleizedRadixTree key tree >>= \case+    Left  err -> throw err+    Right result@(_, nodes, prefix :| _, [], [], cache) -> do+      case nodes of++        -- No children and no parent.+        RadixNode _ Nothing Nothing _ :| [] ->+          return $ deleteRadixTreeNoChildrenNoParent result tree++        -- No children and parent with leaf.+        RadixNode _ Nothing Nothing _ :| parent : _ | isJust $ getLeaf parent ->+          return $ deleteRadixTreeNoChildrenParentWithLeaf result tree++        -- No children and parent without leaf.+        RadixNode _ Nothing Nothing _ :| parent : _ -> do+          let test = not $ List.head prefix+          let root = fromJust $ getChild test parent+          loadHot root _radixBuffer cache _radixDatabase >>= \case+            Nothing -> do+              throw $ StateRootDoesNotExist root+            Just (node, cache') ->+              return $ deleteRadixTreeNoChildrenParentWithoutLeaf result+                                                                  node+                                                                  cache'+                                                                  test+                                                                  tree++        -- One left child.+        RadixNode _ child Nothing _ :| _ | isJust child -> do+          let test = False+          let root = fromJust child+          loadHot root _radixBuffer cache _radixDatabase >>= \case+            Nothing -> do+              throw $ StateRootDoesNotExist root+            Just (node, cache') ->+              return $ deleteRadixTreeOneChild result node cache' test tree++        -- One right child.+        RadixNode _ Nothing child _ :| _ | isJust child -> do+          let test = True+          let root = fromJust child+          loadHot root _radixBuffer cache _radixDatabase >>= \case+            Nothing -> do+              throw $ StateRootDoesNotExist root+            Just (node, cache') ->+              return $ deleteRadixTreeOneChild result node cache' test tree++        -- Two children.+        _ -> return $ deleteRadixTreeTwoChildren result tree++    Right _ -> return tree++{-# SPECIALISE deleteRadixTree+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (RadixTree LevelDB.DB) #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+deleteRadixTreeNoChildrenNoParent+  :: RadixSearchResult+  -- ^ Search result.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+deleteRadixTreeNoChildrenNoParent (root :| _, _, _, _, _, cache) tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setRoot state tree+ where+  buffer = Map.insert defaultRoot def $ Map.delete root _radixBuffer+  state  = defaultRoot++{-# INLINABLE deleteRadixTreeNoChildrenNoParent #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+deleteRadixTreeNoChildrenParentWithLeaf+  :: RadixSearchResult+  -- ^ Search result.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+deleteRadixTreeNoChildrenParentWithLeaf (_ :| root : roots, _ :| node : nodes, overflow :| prefix : prefixes, _, _, cache) tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  root'   = createRootFromNonce _radixNonce+  node'   = setChild test Nothing node+  test    = List.head overflow+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 1+  (,,) buffer nonce state =+    merkleSpoof parents root' counter $ Map.insert root' node' $ Map.delete+      root+      _radixBuffer+deleteRadixTreeNoChildrenParentWithLeaf _ _ =+  throw $ InvalidArgument "unknown parent"++{-# INLINABLE deleteRadixTreeNoChildrenParentWithLeaf #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+deleteRadixTreeNoChildrenParentWithoutLeaf+  :: RadixSearchResult+  -- ^ Search result.+  -> RadixNode+  -- ^ Radix node.+  -> RadixCache+  -- ^ Radix cache.+  -> Bool+  -- ^ Lineage.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+deleteRadixTreeNoChildrenParentWithoutLeaf (_ :| root : roots, _ :| _ : nodes, _ :| prefix : prefixes, _, _, _) node@RadixNode {..} cache test tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  prefix' = createPrefix $ List.drop 1 bits `bool` bits $ List.null parents+  root'   = createRootFromNonce _radixNonce+  node'   = setPrefix prefix' node+  bits    = prefix ++ test : maybe [] toBits _radixPrefix+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 1+  (,,) buffer nonce state =+    merkleSpoof parents root' counter $ Map.insert root' node' $ Map.delete+      root+      _radixBuffer+deleteRadixTreeNoChildrenParentWithoutLeaf _ _ _ _ _ =+  throw $ InvalidArgument "unknown parent"++{-# INLINABLE deleteRadixTreeNoChildrenParentWithoutLeaf #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+deleteRadixTreeOneChild+  :: RadixSearchResult+  -- ^ Search result.+  -> RadixNode+  -- ^ Radix node.+  -> RadixCache+  -- ^ Radix cache.+  -> Bool+  -- ^ Lineage.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+deleteRadixTreeOneChild (root :| roots, _ :| nodes, prefix :| prefixes, _, _, _) node@RadixNode {..} cache test tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  prefix' = createPrefix $ List.drop 1 bits `bool` bits $ List.null parents+  root'   = createRootFromNonce _radixNonce+  node'   = setPrefix prefix' node+  bits    = prefix ++ test : maybe [] toBits _radixPrefix+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 1+  (,,) buffer nonce state =+    merkleSpoof parents root' counter $ Map.insert root' node' $ Map.delete+      root+      _radixBuffer++{-# INLINABLE deleteRadixTreeOneChild #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+deleteRadixTreeTwoChildren+  :: RadixSearchResult+  -- ^ Search result.+  -> RadixTree database+  -- ^ Radix tree.+  -> RadixTree database+deleteRadixTreeTwoChildren (root :| roots, node :| nodes, prefix :| prefixes, _, _, cache) tree@RadixTree {..}+  = setBuffer buffer $ setCache cache $ setNonce nonce $ setRoot state tree+ where+  root'   = createRootFromNonce _radixNonce+  node'   = setLeaf Nothing node+  parents = createParents roots nodes prefix prefixes+  counter = _radixNonce + 1+  (,,) buffer nonce state =+    merkleSpoof parents root' counter $ Map.insert root' node' $ Map.delete+      root+      _radixBuffer++{-# INLINABLE deleteRadixTreeTwoChildren #-}++--------------------------------------------------------------------------------++-- |+-- Lookup a value in a radix tree.+lookupRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Maybe (ByteString, RadixTree database))+lookupRadixTree key tree = do+  found <- searchNonMerkleizedRadixTree key tree+  case found of+    Left err -> throw err+    Right (_, RadixNode {..} :| _, _, prefixOverflow, keyOverflow, cache') ->+      if not $ List.null prefixOverflow && List.null keyOverflow+        then return Nothing+        else return $ do+          value <- _radixLeaf+          let tree' = setCache cache' tree+          return (value, tree')++{-# SPECIALISE lookupRadixTree+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Maybe (ByteString, RadixTree LevelDB.DB)) #-}++--------------------------------------------------------------------------------++-- |+-- Prove that a value exists in a radix tree.+createRadixProof+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Maybe (RadixProof, RadixTree database))+createRadixProof key tree = do+  found <- searchMerkleizedRadixTree key tree+  case found of+    Left err -> throw err+    Right (_, path, _, prefixOverflow, keyOverflow, cache') ->+      if not $ List.null prefixOverflow && List.null keyOverflow+        then return Nothing+        else return $ do+          value <- _radixLeaf $ NonEmpty.head path+          let tree' = setCache cache' tree+          let leaf' = setLeaf Nothing $ NonEmpty.head path+          let path' = leaf' :| NonEmpty.tail path+          let proof = RadixProof path' value+          return (proof, tree')++{-# SPECIALISE createRadixProof+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Maybe (RadixProof, RadixTree LevelDB.DB)) #-}++--------------------------------------------------------------------------------++-- |+-- Verify that a value exists in a radix tree.+verifyRadixProof+  :: ByteString+  -- ^ Key.+  -> RadixRoot+  -- ^ State root.+  -> RadixProof+  -- ^ Radix proof.+  -> Bool+verifyRadixProof key rootHash (includeValue -> RadixProof{..}) =+  validateKey && validateHashes+ where+    -- Validate the proof is for the value at the given key &+    -- validate that the hashes are correct (both state root matches+    -- and that child hashes are found in their parents)+  (validateKey, validateHashes) = fromMaybe (False, False) $ do+    keyBits <- recoverKey+    let root = NonEmpty.last _radixPath+    return (keyBits == toBits key, createRoot root == rootHash)++  recoverKey = do+    let childParents =+          List.zip (NonEmpty.toList _radixPath) (NonEmpty.tail _radixPath)+    leaflessBits <- getAp $ foldMap (Ap . recoverBits) (Reverse childParents)+    let keyBits = leaflessBits <> DList.fromList (getPrefixBits proofLeaf)+    return $ DList.toList keyBits++  getPrefixBits = maybe [] toBits . _radixPrefix++  proofLeaf     = NonEmpty.head _radixPath++  -- Recovering the prefix necessitates us validating the child/parent+  -- hashes. This is because we must find use the child's hash to+  -- decide if the implicit bit is 0 or 1+  recoverBits (child, parent) = do+    let prefixBits = maybe [] toBits (_radixPrefix parent)+        childHash  = createRoot child+        implicit0  = mfilter (== childHash) (_radixLeft parent) $> False+        implicit1  = mfilter (== childHash) (_radixRight parent) $> True++    -- This returning Nothing means we could not validate child/parent+    implicit <- implicit0 <|> implicit1++    return $ DList.fromList prefixBits <> DList.singleton implicit++-- Add the missing leaf value to _radixPath+includeValue :: RadixProof -> RadixProof+includeValue RadixProof {..} = RadixProof+  { _radixPath  = setLeaf (Just _radixValue) (NonEmpty.head _radixPath)+    :| NonEmpty.tail _radixPath+  , _radixValue = _radixValue+  }++--------------------------------------------------------------------------------++-- |+-- Check if a radix tree is empty.+isEmptyRadixTree+  :: RadixTree database+  -- ^ Radix tree.+  -> Bool+isEmptyRadixTree tree = _radixRoot tree == defaultRoot++{-# INLINABLE isEmptyRadixTree #-}++--------------------------------------------------------------------------------++-- |+-- Check if a state root is valid.+isValidRadixRoot+  :: RadixDatabase m database+  => RadixRoot+  -- ^ State root.+  -> RadixTree database+  -- ^ Radix tree.+  -> m Bool+isValidRadixRoot root RadixTree {..} = isJust <$> load _radixDatabase key+  where key = fromShort root++{-# SPECIALISE isValidRadixRoot+  :: RadixRoot+  -> RadixTree LevelDB.DB+  -> ResourceT IO Bool #-}++--------------------------------------------------------------------------------++-- TODO (enzo): Documentation.+merkleSpoof+  :: [(RadixRoot, RadixNode, Bool)]+  -> RadixRoot+  -> Word32+  -> RadixBuffer+  -> (RadixBuffer, Word32, RadixRoot)+merkleSpoof parents fake counter buffer = do+  case parents of+    []                             -> (,,) buffer counter fake+    (,,) root node test : parents' -> do+      let node'    = test `setChild` Just fake $ node+      let root'    = createRootFromNonce counter+      let counter' = counter + 1+      merkleSpoof parents' root' counter' $ Map.insert root' node' $ Map.delete+        root+        buffer++--------------------------------------------------------------------------------++-- |+-- Merkleize a radix tree. This will flush the buffer to the database.+merkleizeRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m (RadixRoot, RadixTree database)+merkleizeRadixTree RadixTree {..} = do+  (,) root cache <- loop _radixRoot _radixCache+  let tree = RadixTree mempty cache _radixCacheSize root _radixDatabase 0 root+  return (root, tree)+ where++  -- Loop.+  loop root cache = do++    -- WARNING: Here we distinguish between Merkleized and non-Merkleized roots+    -- by size. Merkleized roots are 20-byte hashes whereas non-Merkleized roots+    -- are 4-byte nonces. This is a shaky assumption that is subject to change.+    if Short.length root == 20+      then return (root, cache)+      else do++        -- Load the root node.+        result <- loadHot root _radixBuffer cache _radixDatabase+        case result of+          Nothing -> do+            throw $ StateRootDoesNotExist root+          Just (node@RadixNode {..}, cache') -> do+            case (_radixLeft, _radixRight) of++              -- No children.+              (Nothing, Nothing) -> do+                storeCold node cache' _radixDatabase++              -- One left child.+              (Just child, Nothing) -> do+                (root', cache'') <- loop child cache'+                let node' = False `setChild` Just root' $ node+                storeCold node' cache'' _radixDatabase++              -- One right child.+              (Nothing, Just child) -> do+                (root', cache'') <- loop child cache'+                let node' = True `setChild` Just root' $ node+                storeCold node' cache'' _radixDatabase++              -- Two children.+              (Just left, Just right) -> do+                (root' , cache'' ) <- loop left cache'+                (root'', cache''') <- loop right cache''+                let node' = setChildren (Just root', Just root'') node+                storeCold node' cache''' _radixDatabase++{-# SPECIALISE merkleizeRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO (RadixRoot, RadixTree LevelDB.DB) #-}++--------------------------------------------------------------------------------++-- |+-- Create a radix subtree.+subtreeRadixTree+  :: RadixDatabase m database+  => ByteString+  -- ^ Key.+  -> RadixTree database+  -- ^ Radix tree.+  -> m (Maybe (RadixTree database))+subtreeRadixTree key tree@RadixTree {..} = do+  found <- searchNonMerkleizedRadixTree key tree+  case found of+    Left err -> throw err+    Right (_, node :| _, _, prefixOverflow, keyOverflow, cache) ->+      if not $ List.null keyOverflow+        then return Nothing+        else do+          let prefix' = createPrefix prefixOverflow+          let root'   = createRootFromNonce _radixNonce+          let node'   = setPrefix prefix' node+          let buffer  = Map.insert root' node' _radixBuffer+          let nonce   = _radixNonce + 1+          return+            $ Just+            $ setBuffer buffer+            $ setCache cache+            $ setNonce nonce+            $ setRoot root' tree++{-# SPECIALISE subtreeRadixTree+  :: ByteString+  -> RadixTree LevelDB.DB+  -> ResourceT IO (Maybe (RadixTree LevelDB.DB)) #-}++--------------------------------------------------------------------------------++-- |+-- Get the contents of a radix tree.+contentsRadixTree'+  :: RadixDatabase m database+  => Bool+  -- ^ Overwrite state root?+  -> (RadixTree database -> m (Maybe (RadixNode, RadixCache)))+  -- ^ Loading strategy.+  -> RadixTree database+  -- ^ Radix tree.+  -> m [(ByteString, ByteString)]+contentsRadixTree' flag strategy = \tree@RadixTree {..} -> do+  let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag+  loop tree' [] []+ where++  -- Loop.+  loop tree@RadixTree {..} prefix accum = do+    result <- strategy tree+    case fst <$> result of+      Nothing -> do+        throw $ StateRootDoesNotExist _radixRoot+      Just RadixNode {..} -> do+        let prefix'  = prefix ++ maybe [] toBits _radixPrefix+        let key      = fromBits prefix'+        let accum' = maybe accum (\value -> (key, value) : accum) _radixLeaf+        let children = [(, False) <$> _radixLeft, (, True) <$> _radixRight]+        flip foldM accum' `flip` children $ \accum'' -> \case+          Nothing -> do+            return accum''+          Just (root, test) -> do+            let tree'    = setRoot root tree+            let prefix'' = prefix' ++ [test]+            loop tree' prefix'' accum''++{-# SPECIALISE contentsRadixTree'+  :: Bool+  -> (RadixTree LevelDB.DB -> ResourceT IO (Maybe (RadixNode, RadixCache)))+  -> RadixTree LevelDB.DB+  -> ResourceT IO [(ByteString, ByteString)] #-}++--------------------------------------------------------------------------------++-- |+-- A convenient alias for `contentsNonMerkleizedRadixTree`.+contentsRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m [(ByteString, ByteString)]+contentsRadixTree = contentsNonMerkleizedRadixTree++{-# SPECIALISE contentsRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO [(ByteString, ByteString)] #-}++--------------------------------------------------------------------------------++-- |+-- Get the contents of a Merkleized radix tree.+contentsMerkleizedRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m [(ByteString, ByteString)]+contentsMerkleizedRadixTree = do+  contentsRadixTree' True $ \RadixTree {..} -> do+    loadCold _radixRoot _radixCache _radixDatabase++{-# SPECIALISE contentsMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO [(ByteString, ByteString)] #-}++--------------------------------------------------------------------------------++-- |+-- Get the contents of a non-Merkleized radix tree.+contentsNonMerkleizedRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m [(ByteString, ByteString)]+contentsNonMerkleizedRadixTree = do+  contentsRadixTree' False $ \RadixTree {..} -> do+    loadHot _radixRoot _radixBuffer _radixCache _radixDatabase++{-# SPECIALISE contentsNonMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO [(ByteString, ByteString)] #-}++--------------------------------------------------------------------------------++-- |+-- Draw a radix tree.+drawRadixTree'+  :: RadixDatabase m database+  => Bool+  -- ^ Overwrite state root?+  -> (RadixTree database -> m (Maybe (RadixNode, RadixCache)))+  -- ^ Loading strategy.+  -> RadixTree database+  -- ^ Radix tree.+  -> m String+drawRadixTree' flag strategy = \tree@RadixTree {..} -> do+  let tree' = tree `bool` setRoot _radixCheckpoint tree $ flag+  List.unlines <$> loop1 tree'+ where++  -- Loop 1.+  loop1 tree@RadixTree {..} = do+    result <- strategy tree+    case fst <$> result of+      Nothing -> do+        throw $ StateRootDoesNotExist _radixRoot+      Just node@RadixNode {..} -> do+        let children = catMaybes [_radixRight, _radixLeft]+        more <- loop2 $ flip setRoot tree <$> children+        let item = [pretty _radixRoot ++ show node]+        return $ item ++ more++  -- Loop 2.+  loop2 = \case+    []  -> return []+    [x] -> do+      item <- loop1 x+      return $ "│" : shift "└─╴" "   " item+    x : xs -> do+      item <- loop1 x+      more <- loop2 xs+      return $ "│" : shift "├─╴" "│  " item ++ more++  -- Utilities.+  pretty = color . List.take 8 . Strict.unpack . Base16.encode . fromShort+  color  = (++) "\ESC[96m" . flip (++) "\ESC[0m"+  shift x = List.zipWith (++) . (:) x . List.repeat++{-# SPECIALISE drawRadixTree'+  :: Bool+  -> (RadixTree LevelDB.DB -> ResourceT IO (Maybe (RadixNode, RadixCache)))+  -> RadixTree LevelDB.DB+  -> ResourceT IO String #-}++--------------------------------------------------------------------------------++-- |+-- A convenient alias for `drawNonMerkleizedRadixTree`.+drawRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m String+drawRadixTree = drawNonMerkleizedRadixTree++{-# SPECIALISE drawRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO String #-}++--------------------------------------------------------------------------------++-- |+-- Draw a Merkleized radix tree.+drawMerkleizedRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m String+drawMerkleizedRadixTree = do+  drawRadixTree' True $ \RadixTree {..} -> do+    loadCold _radixRoot _radixCache _radixDatabase++{-# SPECIALISE drawMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO String #-}++--------------------------------------------------------------------------------++-- |+-- Draw a non-Merkleized radix tree.+drawNonMerkleizedRadixTree+  :: RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m String+drawNonMerkleizedRadixTree = do+  drawRadixTree' False $ \RadixTree {..} -> do+    loadHot _radixRoot _radixBuffer _radixCache _radixDatabase++{-# SPECIALISE drawNonMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO String #-}++--------------------------------------------------------------------------------++-- |+-- A convenient alias for `printNonMerkleizedRadixTree`.+printRadixTree+  :: MonadIO m+  => RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m ()+printRadixTree = printNonMerkleizedRadixTree++{-# SPECIALISE printRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO () #-}++--------------------------------------------------------------------------------++-- |+-- Print a Merkleized radix tree.+printMerkleizedRadixTree+  :: MonadIO m+  => RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m ()+printMerkleizedRadixTree tree = do+  picture <- drawMerkleizedRadixTree tree+  liftIO $ IO.putStrLn picture++{-# SPECIALISE printMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO () #-}++--------------------------------------------------------------------------------++-- |+-- Print a non-Merkleized radix tree.+printNonMerkleizedRadixTree+  :: MonadIO m+  => RadixDatabase m database+  => RadixTree database+  -- ^ Radix tree.+  -> m ()+printNonMerkleizedRadixTree tree = do+  picture <- drawNonMerkleizedRadixTree tree+  liftIO $ IO.putStrLn picture++{-# SPECIALISE printNonMerkleizedRadixTree+  :: RadixTree LevelDB.DB+  -> ResourceT IO () #-}
+ src/DFINITY/RadixTree/._Bits.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Conduit.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Hash.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Lenses.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Lock.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Memory.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Serialise.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Types.hs view

binary file changed (absent → 176 bytes)

+ src/DFINITY/RadixTree/._Utilities.hs view

binary file changed (absent → 176 bytes)

src/DFINITY/RadixTree/Bits.hs view
@@ -1,37 +1,47 @@+{-# LANGUAGE ExplicitForAll #-}+ {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Bits-   ( Bitable(..)-   , matchBits-   ) where+  ( Bitable(..)+  , matchBits+  )+where -import Data.Bits ((.|.), setBit, testBit)-import Data.Bool (bool)-import Data.ByteString (ByteString, pack, unpack)-import Data.Word (Word8)+import Data.Bits+import Data.Bool+import Data.ByteString       as Strict+import Data.ByteString.Short as Short+import Data.List             as List+import Data.Word  class Bitable a where-   fromBits :: [Bool] -> a-   toBits :: a -> [Bool]+  fromBits :: [Bool] -> a+  toBits :: a -> [Bool]  instance Bitable ByteString where-   fromBits = pack . go where-      go [] = []-      go xs = let (a, b) = splitAt 8 xs in toByte a : go b-   toBits = concatMap fromByte . unpack+  fromBits = Strict.pack . go where+    go [] = []+    go xs = let (a, b) = List.splitAt 8 xs in toByte a : go b+  toBits = List.concatMap fromByte . Strict.unpack +instance Bitable ShortByteString where+  fromBits = Short.pack . go where+    go [] = []+    go xs = let (a, b) = List.splitAt 8 xs in toByte a : go b+  toBits = List.concatMap fromByte . Short.unpack+ matchBits :: [Bool] -> [Bool] -> [Bool]-matchBits x = map fst . zipWhile (==) x+matchBits x = List.map fst . zipWhile (==) x -zipWhile :: (a -> b -> Bool) -> [a] -> [b] -> [(a,b)]-zipWhile f x = takeWhile (uncurry f) . zip x+zipWhile :: (a -> b -> Bool) -> [a] -> [b] -> [(a, b)]+zipWhile f x = List.takeWhile (uncurry f) . List.zip x  fromByte :: Word8 -> [Bool]-fromByte = flip map order . testBit+fromByte = flip List.map order . testBit  toByte :: [Bool] -> Word8-toByte = foldl (.|.) 0 . zipWith (bool 0 . setBit 0) order+toByte = List.foldl (.|.) 0 . List.zipWith (bool 0 . setBit 0) order  order :: Enum a => Num a => [a]-order = [7, 6.. 0]+order = [7, 6 .. 0]
− src/DFINITY/RadixTree/Bloom.hs
@@ -1,35 +0,0 @@-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE MagicHash #-}--{-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}--module DFINITY.RadixTree.Bloom-   ( emptyRadixBloom-   ) where--import Data.BloomFilter (empty)-import Data.ByteString.Short.Internal (ShortByteString(..))-import Data.Word (Word32)-import GHC.Prim (ByteArray#, Int#, (-#), indexWord32Array#, quotInt#, sizeofByteArray#)-import GHC.Word (Word32(..))--import DFINITY.RadixTree.Types--emptyRadixBloom :: Int -> RadixBloom-emptyRadixBloom = empty hash--hash :: RadixRoot -> [Word32]-hash = \ case-   SBS bytes# ->-      let n# = sizeofByteArray# bytes#-          m# = quotInt# n# 4#-      in  hash# bytes# m#--hash# :: ByteArray# -> Int# -> [Word32]-hash# bytes# = \ case-   0# -> []-   i# ->-      let j# = i# -# 1#-          w# = indexWord32Array# bytes# j#-      in  W32# w# : hash# bytes# j#
src/DFINITY/RadixTree/Conduit.hs view
@@ -1,56 +1,55 @@-{-# LANGUAGE FlexibleContexts #-}-{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE FlexibleContexts      #-}+{-# LANGUAGE LambdaCase            #-} {-# LANGUAGE PartialTypeSignatures #-}-{-# LANGUAGE Rank2Types #-}-{-# LANGUAGE RecordWildCards #-}-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE Rank2Types            #-}+{-# LANGUAGE RecordWildCards       #-}+{-# LANGUAGE ScopedTypeVariables   #-} -{-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}-{-# OPTIONS -fno-warn-partial-type-signatures #-}+{-# OPTIONS -Wall                        #-}+{-# OPTIONS -Wno-partial-type-signatures #-}  -- | -- Module     : DFINITY.RadixTree.Conduit--- Copyright  : 2018 DFINITY Stiftung--- License    : GPL-3+-- Copyright  : 2018-2019 DFINITY Stiftung+-- License    : BSD-3-Clause -- Maintainer : Enzo Haussecker <enzo@dfinity.org> -- Stability  : Stable -- -- A parallel download protocol.-module DFINITY.RadixTree.Conduit (--   -- ** Combinators-     sourceRadixTree-   , sinkRadixTree+module DFINITY.RadixTree.Conduit+  ( -   ) where+  -- ** Combinators+    sourceRadixTree+  , sinkRadixTree+  )+where -import Codec.Serialise (deserialise, deserialiseOrFail, serialise)-import Control.Concurrent (forkIO, killThread)-import Control.Concurrent.BoundedChan (BoundedChan, readChan, tryWriteChan)-import Control.Concurrent.MVar (MVar, modifyMVar_, newMVar, readMVar)-import Control.Concurrent.ReadWriteLock (RWLock)-import Control.Exception (throw)-import Control.Monad (filterM, foldM, forM_, forever, void, when)-import Control.Monad.IO.Class (liftIO)-import Control.Monad.Trans.Resource (MonadResource, ResourceT, allocate, release)-import Crypto.Hash.BLAKE2.BLAKE2s (hash)-import Data.ByteString (ByteString)-import Data.ByteString.Lazy (fromStrict, toStrict)-import Data.ByteString.Short (fromShort, toShort)-import Data.Conduit (ConduitT, await, yield)-import Data.HashTable.IO as Cuckoo (CuckooHashTable, delete, fromList, insert, lookup)-import Data.List as List (delete)-import Data.LruCache as LRU (LruCache, empty, insert, lookup)-import Data.Maybe (isJust, isNothing)-import Data.Void (Void)-import Database.LevelDB as LevelDB (DB, Options(..), defaultOptions, defaultWriteOptions, delete)-import Database.LevelDB.Base (open)-import Database.LevelDB.Internal (unsafeClose)-import System.Directory (canonicalizePath, getTemporaryDirectory, removeDirectoryRecursive)-import System.IO.Temp (createTempDirectory)+import Codec.Serialise+import Control.Concurrent+import Control.Concurrent.BoundedChan   as BChan+import Control.Concurrent.ReadWriteLock+import Control.Exception+import Control.Monad                    as Monad+import Control.Monad.IO.Class+import Control.Monad.Trans.Resource+import Data.ByteArray+import Data.ByteString                  as Strict+import Data.ByteString.Lazy+import Data.ByteString.Short+import Data.Conduit                     as Conduit+import Data.HashTable.IO                as Cuckoo+import Data.List                        as List+import Data.LruCache                    as LRU+import Data.Maybe+import Database.LevelDB+import Database.LevelDB.Base            as LevelDB+import Database.LevelDB.Internal+import System.Directory+import System.IO.Temp  import DFINITY.RadixTree.Bits+import DFINITY.RadixTree.Hash import DFINITY.RadixTree.Lenses import DFINITY.RadixTree.Lock import DFINITY.RadixTree.Types@@ -61,47 +60,55 @@ -- | -- Create a conduit from a radix tree. sourceRadixTree-   :: forall m database. MonadResource m-   => RadixDatabase (ConduitT () ByteString m) database-   => [Bool] -- ^ Bit mask.-   -> Int -- ^ LRU cache size in items.-   -> BoundedChan RadixRoot -- ^ Terminal state root producer.-   -> RadixTree database -- ^ Radix tree.-   -> RWLock -- ^ Radix database lock.-   -> ConduitT () ByteString m ()-sourceRadixTree mask cacheSize chan tree radixLock-   | cacheSize <= 0 = throw $ InvalidArgument "invalid LRU cache size"-   | otherwise = do-      cache <- liftIO $ newMVar $ empty cacheSize-      action <- fmap fst $ flip allocate killThread $ forkIO $ forever $ do-         root <- readChan chan-         modifyMVar_ cache $ pure . LRU.insert root ()-      loop cache tree []-      release action-      where+  :: forall m database+   . MonadResource m+  => RadixDatabase (ConduitT () Strict.ByteString m) database+  => [Bool]+  -- ^ Bitmask.+  -> Int+  -- ^ LRU cache size in items.+  -> BoundedChan RadixRoot+  -- ^ Terminal state root producer.+  -> RadixTree database+  -- ^ Radix tree.+  -> RWLock+  -- ^ Radix database lock.+  -> ConduitT () Strict.ByteString m ()+sourceRadixTree bitmask cacheSize chan tree radixLock+  | cacheSize <= 0 = throw $ InvalidArgument "invalid LRU cache size"+  | otherwise = do+    cache  <- liftIO $ newMVar $ LRU.empty cacheSize+    action <- fmap fst $ flip allocate killThread $ forkIO $ forever $ do+      root <- BChan.readChan chan+      modifyMVar_ cache $ pure . LRU.insert root ()+    loop cache tree []+    release action+ where -      loop-         :: MVar (LruCache RadixRoot ())-         -> RadixTree database-         -> [RadixRoot]-         -> ConduitT () ByteString m ()-      loop cache subtree@RadixTree {..} accum = do-         let accum' = _radixCheckpoint:accum-         seen <- liftIO $ readMVar cache-         if flip any accum' $ isJust . flip LRU.lookup seen-         then pure ()-         else do-            let key = fromShort _radixCheckpoint-            result <- withReadLock radixLock $ load _radixDatabase key-            case result of-               Nothing -> pure ()-               Just bytes -> do-                  let RadixNode {..} = deserialise $ fromStrict bytes-                  let success = all id $ zipWith (==) mask $ toBits $ fromShort _radixCheckpoint-                  when success $ yield bytes-                  forM_ [_radixLeft, _radixRight] $ \ case-                     Nothing -> pure ()-                     Just root -> loop cache `flip` accum' $ setCheckpoint root subtree+  loop+    :: MVar (LruCache RadixRoot ())+    -> RadixTree database+    -> [RadixRoot]+    -> ConduitT () Strict.ByteString m ()+  loop cache subtree@RadixTree {..} accum = do+    let accum' = _radixCheckpoint : accum+    seen <- liftIO $ readMVar cache+    if flip List.any accum' $ isJust . flip LRU.lookup seen+      then pure ()+      else do+        let key = fromShort _radixCheckpoint+        result <- withReadLock radixLock $ load _radixDatabase key+        case result of+          Nothing    -> pure ()+          Just bytes -> do+            let RadixNode {..} = deserialise $ fromStrict bytes+            let checkpoint     = toBits $ fromShort _radixCheckpoint+            let success        = and $ List.zipWith (==) bitmask checkpoint+            when success $ Conduit.yield bytes+            forM_ [_radixLeft, _radixRight] $ \case+              Nothing -> pure ()+              Just root ->+                loop cache `flip` accum' $ setCheckpoint root subtree  {-# SPECIALISE sourceRadixTree                :: [Bool]@@ -109,144 +116,168 @@                -> BoundedChan RadixRoot                -> RadixTree DB                -> RWLock-               -> ConduitT () ByteString (ResourceT IO) () #-}+               -> ConduitT () Strict.ByteString (ResourceT IO) () #-}  --------------------------------------------------------------------------------  -- | -- Create a radix tree from a conduit. sinkRadixTree-   :: forall m database. MonadResource m-   => RadixDatabase (ConduitT ByteString Void m) database-   => RadixRoot -- ^ Target state root.-   -> BoundedChan RadixRoot -- ^ Terminal state root consumer.-   -> RadixTree database -- ^ Radix tree.-   -> RWLock -- ^ Radix database lock.-   -> ConduitT ByteString Void m (Either String (RadixTree database))+  :: forall m database+   . MonadResource m+  => RadixDatabase (ConduitT Strict.ByteString Void m) database+  => RadixRoot+  -- ^ Target state root.+  -> BoundedChan RadixRoot+  -- ^ Terminal state root consumer.+  -> RadixTree database+  -- ^ Radix tree.+  -> RWLock+  -- ^ Radix database lock.+  -> ConduitT+       Strict.ByteString+       Void+       m+       (Either String (RadixTree database)) sinkRadixTree checkpoint chan tree@RadixTree {..} radixLock = do-   -- Create a temporary directory.-   relative <- liftIO getTemporaryDirectory-   absolute <- liftIO $ canonicalizePath relative-   let createTempDir = createTempDirectory absolute "dfinity"-   let destroyTempDir = ignoreIOErrors . removeDirectoryRecursive-   (tempDirKey, tempDir) <- allocate createTempDir destroyTempDir-   -- Create a temporary database.-   let createTempDatabase = open tempDir defaultOptions {createIfMissing = True}-   (tempDatabaseKey, tempDatabase) <- allocate createTempDatabase unsafeClose-   -- Create a hash table.-   table <- liftIO $ fromList [(checkpoint, Nothing)]-   -- Consume the radix nodes.-   result <- loop1 tempDatabase table-   -- Remove the temporary database.-   release tempDatabaseKey-   release tempDirKey-   -- Return the result.-   pure result-   where+  -- Create a temporary directory.+  relative <- liftIO getTemporaryDirectory+  absolute <- liftIO $ canonicalizePath relative+  let createTempDir  = createTempDirectory absolute "dfinity"+  let destroyTempDir = ignoreIOErrors . removeDirectoryRecursive+  (tempDirKey, tempDir) <- allocate createTempDir destroyTempDir+  -- Create a temporary database.+  let options            = defaultOptions { createIfMissing = True }+  let createTempDatabase = LevelDB.open tempDir options+  (tempDatabaseKey, tempDatabase) <- allocate createTempDatabase unsafeClose+  -- Create a hash table.+  table                           <- liftIO $ fromList [(checkpoint, Nothing)]+  -- Consume the radix nodes.+  result                          <- loop1 tempDatabase table+  -- Remove the temporary database.+  release tempDatabaseKey+  release tempDirKey+  -- Return the result.+  pure result+ where -   -- Loop 1: The collection loop.-   loop1-      :: DB-      -> CuckooHashTable RadixRoot (Maybe RadixRoot)-      -> ConduitT ByteString Void m (Either String (RadixTree database))-   loop1 tempDatabase table = do-      -- Have we collected all the radix nodes?-      done <- liftIO $ isNothing <$> Cuckoo.lookup table checkpoint-      if done+  -- Loop 1: The collection loop.+  loop1+    :: DB+    -> CuckooHashTable RadixRoot (Maybe RadixRoot)+    -> ConduitT+         Strict.ByteString+         Void+         m+         (Either String (RadixTree database))+  loop1 tempDatabase table = do+    -- Have we collected all the radix nodes?+    done <- liftIO $ isNothing <$> Cuckoo.lookup table checkpoint+    if done       then pure $ Right $ setCheckpoint checkpoint $ setRoot checkpoint tree       else do-         -- Wait for a radix node.-         mval <- await-         case mval of-            Nothing -> pure $ Left "EOF"-            Just node ->-               case deserialiseOrFail $ fromStrict node of-                  Left _ -> loop1 tempDatabase table-                  Right RadixNode {..} -> do-                     -- Does the radix node already exist in the radix database?-                     let key = hash 20 mempty node-                     let root = toShort key-                     want <- liftIO $ isJust <$> Cuckoo.lookup table root-                     exists <- if want-                        then pure False-                        else withReadLock radixLock $ isJust <$> load _radixDatabase key-                     if exists-                     then do-                        -- Announce a terminal state root.-                        liftIO $ void $ tryWriteChan chan root-                        -- Discard the radix node.-                        liftIO $ Cuckoo.delete table root-                        loop1 tempDatabase table-                     else do-                        -- Identify any children not present in the radix database.-                        let absent = fmap isNothing . withReadLock radixLock . load _radixDatabase . fromShort-                        let children = maybe id (:) _radixLeft $ maybe id (:) _radixRight []-                        targets <- filterM absent children-                        -- Write the radix node and its targets to the temporary database.-                        let value = toStrict $ serialise (node, targets)-                        store tempDatabase key value-                        -- Does the radix node have any gaps in its lineage?-                        if not want-                        then loop1 tempDatabase table-                        else do-                           -- Write all eligible radix nodes to the radix database.-                           eligible <- loop2 tempDatabase table root []-                           loop3 tempDatabase table eligible-                           loop1 tempDatabase table+        -- Wait for a radix node.+        mval <- await+        case mval of+          Nothing   -> pure $ Left "EOF"+          Just node -> case deserialiseOrFail $ fromStrict node of+            Left  _              -> loop1 tempDatabase table+            Right RadixNode {..} -> do+              -- Does the radix node already exist in the radix database?+              let key  = convert $ blake2s160 node+              let root = toShort key+              want   <- liftIO $ isJust <$> Cuckoo.lookup table root+              exists <- if want+                then pure False+                else withReadLock radixLock $ isJust <$> load _radixDatabase key+              if exists+                then do+                  -- Announce a terminal state root.+                  liftIO $ void $ tryWriteChan chan root+                  -- Discard the radix node.+                  liftIO $ Cuckoo.delete table root+                  loop1 tempDatabase table+                else do+                  -- Identify any children not present in the radix database.+                  let absent =+                        fmap isNothing+                          . withReadLock radixLock+                          . load _radixDatabase+                          . fromShort+                  let children =+                        maybe id (:) _radixLeft $ maybe id (:) _radixRight []+                  targets <- filterM absent children+                  -- Write the radix node and its targets to the temporary database.+                  let value = toStrict $ serialise (node, targets)+                  store tempDatabase key value+                  -- Does the radix node have any gaps in its lineage?+                  if not want+                    then loop1 tempDatabase table+                    else do+                      -- Write all eligible radix nodes to the radix database.+                      eligible <- loop2 tempDatabase table root []+                      loop3 tempDatabase table eligible+                      loop1 tempDatabase table -   -- Loop 2: The aggregation loop.-   loop2-      :: DB-      -> CuckooHashTable RadixRoot (Maybe RadixRoot)-      -> RadixRoot-      -> [(RadixRoot, ByteString)]-      -> ConduitT ByteString Void m [(RadixRoot, ByteString)]-   loop2 tempDatabase table root eligible = do-      -- Read the radix node and its targets from the temporary database.-      result <- load tempDatabase $ fromShort root-      case deserialise . fromStrict <$> result of-         Nothing -> pure eligible-         Just (bytes, targets :: [] _) ->-            -- Is the radix node eligible to be written to disk?-            if null targets-            then pure $ (root, bytes):eligible-            else do-               -- Write the child-parent pairs to the hash table.-               liftIO $ forM_ targets $ \ child ->-                  Cuckoo.insert table child $ Just root-               -- Recurse.-               foldM step eligible targets-               where step = flip $ loop2 tempDatabase table+  -- Loop 2: The aggregation loop.+  loop2+    :: DB+    -> CuckooHashTable RadixRoot (Maybe RadixRoot)+    -> RadixRoot+    -> [(RadixRoot, Strict.ByteString)]+    -> ConduitT+         Strict.ByteString+         Void+         m+         [(RadixRoot, Strict.ByteString)]+  loop2 tempDatabase table root eligible = do+    -- Read the radix node and its targets from the temporary database.+    result <- load tempDatabase $ fromShort root+    case deserialise . fromStrict <$> result of+      Nothing                       -> pure eligible+      Just (bytes, targets :: [] _) -> do+        -- Is the radix node eligible to be written to disk?+        if List.null targets+          then pure $ (root, bytes) : eligible+          else do+            -- Write the child-parent pairs to the hash table.+            liftIO $ forM_ targets $ \child ->+              Cuckoo.insert table child $ Just root+            -- Recurse.+            Monad.foldM step eligible targets+        where step = flip $ loop2 tempDatabase table -   -- Loop 3: The write loop.-   loop3-      :: DB-      -> CuckooHashTable RadixRoot (Maybe RadixRoot)-      -> [(RadixRoot, ByteString)]-      -> ConduitT ByteString Void m ()-   loop3 tempDatabase table = \ case-      [] -> pure ()-      (root, bytes):eligible -> do-         -- Write the radix node to the radix database.-         let key = fromShort root-         withWriteLock radixLock $ store _radixDatabase key bytes-         -- Delete the radix node from the temporary database.-         LevelDB.delete tempDatabase defaultWriteOptions $ fromShort root-         Just parent <- liftIO $ Cuckoo.lookup table root-         liftIO $ Cuckoo.delete table root-         case parent of-            Nothing -> pure ()-            Just root' -> do-               let key' = fromShort root'-               Just value <- load tempDatabase key'-               let (bytes', targets') = deserialise $ fromStrict value-               let targets'' = List.delete root targets'-               -- Have both siblings been written to the radix database?-               if null targets''-               then do-                  let eligible' = (root', bytes'):eligible+  -- Loop 3: The write loop.+  loop3+    :: DB+    -> CuckooHashTable RadixRoot (Maybe RadixRoot)+    -> [(RadixRoot, Strict.ByteString)]+    -> ConduitT Strict.ByteString Void m ()+  loop3 tempDatabase table = \case+    []                       -> pure ()+    (root, bytes) : eligible -> do+      -- Write the radix node to the radix database.+      let key = fromShort root+      withWriteLock radixLock $ store _radixDatabase key bytes+      -- Delete the radix node from the temporary database.+      LevelDB.delete tempDatabase defaultWriteOptions $ fromShort root+      Just parent <- liftIO $ Cuckoo.lookup table root+      liftIO $ Cuckoo.delete table root+      case parent of+        Nothing    -> pure ()+        Just root' -> do+          let key' = fromShort root'+          load tempDatabase key' >>= \case+            Nothing    -> loop3 tempDatabase table eligible+            Just value -> do+              let (bytes', targets') = deserialise $ fromStrict value+              let targets''          = List.delete root targets'+              -- Have both siblings been written to the radix database?+              if List.null targets''+                then do+                  let eligible' = (root', bytes') : eligible                   loop3 tempDatabase table eligible'-               else do+                else do                   -- Update the parent node.                   let value' = toStrict $ serialise (bytes', targets'')                   store tempDatabase key' value'@@ -257,9 +288,7 @@                -> BoundedChan RadixRoot                -> RadixTree DB                -> RWLock-               -> ConduitT ByteString+               -> ConduitT Strict.ByteString                            Void                            (ResourceT IO)                            (Either String (RadixTree DB)) #-}----------------------------------------------------------------------------------
+ src/DFINITY/RadixTree/Hash.hs view
@@ -0,0 +1,12 @@+{-# OPTIONS -Wall #-}++module DFINITY.RadixTree.Hash+  ( blake2s160+  )+where++import Crypto.Hash+import Data.ByteString++blake2s160 :: ByteString -> Digest Blake2s_160+blake2s160 = hash
src/DFINITY/RadixTree/Lenses.hs view
@@ -1,43 +1,42 @@ {-# LANGUAGE TemplateHaskell #-} -{-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}-{-# OPTIONS -fno-warn-missing-signatures #-}-{-# OPTIONS -fno-warn-unused-top-binds #-}+{-# OPTIONS -Wall                   #-}+{-# OPTIONS -Wno-missing-signatures #-}+{-# OPTIONS -Wno-unused-top-binds   #-}  module DFINITY.RadixTree.Lenses-   ( getPrefix-   , getLeft-   , getRight-   , getChild-   , getChildren-   , getLeaf-   , getPath-   , getValue-   , getBloom-   , getBuffer-   , getCache-   , getCheckpoint-   , getNonce-   , getRoot-   , setPrefix-   , setLeft-   , setRight-   , setChild-   , setChildren-   , setLeaf-   , setBloom-   , setBuffer-   , setCache-   , setCheckpoint-   , setNonce-   , setRoot-   ) where+  ( getPrefix+  , getLeft+  , getRight+  , getChild+  , getChildren+  , getLeaf+  , getPath+  , getValue+  , getBuffer+  , getCache+  , getCheckpoint+  , getNonce+  , getRoot+  , setPrefix+  , setLeft+  , setRight+  , setChild+  , setChildren+  , setLeaf+  , setBuffer+  , setCache+  , setCheckpoint+  , setNonce+  , setRoot+  )+where -import Data.Bool (bool)-import Data.ByteString (ByteString)-import Data.List.NonEmpty (NonEmpty)-import Lens.Simple (makeLenses, set, view)+import Data.Bool+import Data.ByteString+import Data.List.NonEmpty+import Data.Word+import Lens.Simple  import DFINITY.RadixTree.Types @@ -69,9 +68,6 @@ getValue :: RadixProof -> ByteString getValue = view radixValue -getBloom :: RadixTree database -> RadixBloom-getBloom = view radixBloom- getBuffer :: RadixTree database -> RadixBuffer getBuffer = view radixBuffer @@ -81,7 +77,7 @@ getCheckpoint :: RadixTree database -> RadixRoot getCheckpoint = view radixCheckpoint -getNonce :: RadixTree database -> Word+getNonce :: RadixTree database -> Word32 getNonce = view radixNonce  getRoot :: RadixTree database -> RadixRoot@@ -111,9 +107,6 @@ setValue :: ByteString -> RadixProof -> RadixProof setValue = set radixValue -setBloom :: RadixBloom -> RadixTree database -> RadixTree database-setBloom = set radixBloom- setBuffer :: RadixBuffer -> RadixTree database -> RadixTree database setBuffer = set radixBuffer @@ -123,7 +116,7 @@ setCheckpoint :: RadixRoot -> RadixTree database -> RadixTree database setCheckpoint = set radixCheckpoint -setNonce :: Word -> RadixTree database -> RadixTree database+setNonce :: Word32 -> RadixTree database -> RadixTree database setNonce = set radixNonce  setRoot :: RadixRoot -> RadixTree database -> RadixTree database
src/DFINITY/RadixTree/Lock.hs view
@@ -1,30 +1,32 @@ {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Lock-   ( withReadLock-   , withWriteLock-   ) where+  ( withReadLock+  , withWriteLock+  )+where -import Control.Concurrent.ReadWriteLock (RWLock, acquireRead, acquireWrite, releaseRead, releaseWrite)-import Control.Monad.Trans.Resource (MonadResource, allocate, release)+import Control.Concurrent.ReadWriteLock+import Control.Monad.Trans.Resource +withLock+  :: MonadResource m+  => (RWLock -> IO ())+  -> (RWLock -> IO ())+  -> RWLock+  -> m a+  -> m a+withLock f g lock action = do+  key    <- fst <$> allocate acquireLock releaseLock+  result <- action+  release key+  pure result+ where+  acquireLock = f lock+  releaseLock = const $ g lock+ withReadLock :: MonadResource m => RWLock -> m a -> m a-withReadLock lock action = do-   key <- fst <$> allocate acquireLock releaseLock-   result <- action-   release key-   pure result-   where-   acquireLock = acquireRead lock-   releaseLock = const $ releaseRead lock+withReadLock = withLock acquireRead releaseRead  withWriteLock :: MonadResource m => RWLock -> m a -> m a-withWriteLock lock action = do-   key <- fst <$> allocate acquireLock releaseLock-   result <- action-   release key-   pure result-   where-   acquireLock = acquireWrite lock-   releaseLock = const $ releaseWrite lock+withWriteLock = withLock acquireWrite releaseWrite
src/DFINITY/RadixTree/Memory.hs view
@@ -1,103 +1,89 @@ {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Memory-   ( loadHot-   , loadCold-   , storeHot-   , storeCold-   ) where+  ( loadHot+  , loadCold+  , storeCold+  )+where -import Codec.Serialise (deserialise, serialise)-import Control.Monad.Trans.Resource (ResourceT)-import Crypto.Hash.BLAKE2.BLAKE2s (hash)-import Data.ByteString.Lazy (fromStrict, toStrict)-import Data.ByteString.Short (fromShort, toShort)-import Data.LruCache as LRU (insert, lookup)-import Data.Map.Strict as Map (insert, lookup)-import Database.LevelDB (DB)+import Codec.Serialise+import Control.Monad.Trans.Resource+import Data.ByteArray+import Data.ByteString.Lazy+import Data.ByteString.Short+import Data.LruCache                as LRU+import Data.Map.Strict              as Map+import Database.LevelDB +import DFINITY.RadixTree.Hash import DFINITY.RadixTree.Types  --------------------------------------------------------------------------------  loadHot-   :: RadixDatabase m database-   => RadixRoot-   -> RadixBuffer-   -> RadixCache-   -> database-   -> m (Maybe (RadixNode, RadixCache))-loadHot root buffer cache database =-   case Map.lookup root buffer of-      Just node -> pure $ Just (node, cache)-      Nothing -> loadCold root cache database+  :: RadixDatabase m database+  => RadixRoot+  -> RadixBuffer+  -> RadixCache+  -> database+  -> m (Maybe (RadixNode, RadixCache))+loadHot root buffer cache database = case Map.lookup root buffer of+  Just node -> pure $ Just (node, cache)+  Nothing   -> loadCold root cache database  {-# SPECIALISE loadHot-               :: RadixRoot-               -> RadixBuffer-               -> RadixCache-               -> DB-               -> ResourceT IO (Maybe (RadixNode, RadixCache)) #-}+  :: RadixRoot+  -> RadixBuffer+  -> RadixCache+  -> DB+  -> ResourceT IO (Maybe (RadixNode, RadixCache)) #-}  --------------------------------------------------------------------------------  loadCold-   :: RadixDatabase m database-   => RadixRoot-   -> RadixCache-   -> database-   -> m (Maybe (RadixNode, RadixCache))-loadCold root cache database =-   case LRU.lookup root cache of-      Just (node, cache') ->-         seq cache' $ seq node $ pure $ Just (node, cache')-      Nothing -> do-         let key = fromShort root-         result <- load database key-         case result of-            Just bytes -> do-               let node = deserialise $ fromStrict bytes-               let cache' = LRU.insert root node cache-               seq cache' $ seq node $ pure $ Just (node, cache')-            Nothing -> pure $ Nothing+  :: RadixDatabase m database+  => RadixRoot+  -> RadixCache+  -> database+  -> m (Maybe (RadixNode, RadixCache))+loadCold root cache database = case LRU.lookup root cache of+  Just (node, cache') -> seq cache' $ seq node $ pure $ Just (node, cache')+  Nothing             -> do+    let key = fromShort root+    result <- load database key+    case result of+      Just bytes -> do+        let node   = deserialise $ fromStrict bytes+        let cache' = LRU.insert root node cache+        seq cache' $ seq node $ pure $ Just (node, cache')+      Nothing -> pure Nothing  {-# SPECIALISE loadCold-               :: RadixRoot-               -> RadixCache-               -> DB-               -> ResourceT IO (Maybe (RadixNode, RadixCache)) #-}------------------------------------------------------------------------------------storeHot-   :: RadixRoot-   -> RadixNode-   -> RadixBuffer-   -> RadixBuffer-storeHot = Map.insert+  :: RadixRoot+  -> RadixCache+  -> DB+  -> ResourceT IO (Maybe (RadixNode, RadixCache)) #-}  --------------------------------------------------------------------------------  storeCold-   :: RadixDatabase m database-   => RadixNode-   -> RadixCache-   -> database-   -> m (RadixRoot, RadixCache)+  :: RadixDatabase m database+  => RadixNode+  -> RadixCache+  -> database+  -> m (RadixRoot, RadixCache) storeCold node cache database = do-   store database key bytes-   seq cache' $ pure (root, cache')-   where-   bytes = toStrict $ serialise node-   key = hash 20 mempty bytes-   root = toShort key-   cache' = LRU.insert root node cache+  store database key bytes+  seq cache' $ pure (root, cache')+ where+  bytes  = toStrict $ serialise node+  key    = convert $ blake2s160 bytes+  root   = toShort key+  cache' = LRU.insert root node cache  {-# SPECIALISE storeCold-               :: RadixNode-               -> RadixCache-               -> DB-               -> ResourceT IO (RadixRoot, RadixCache) #-}----------------------------------------------------------------------------------+  :: RadixNode+  -> RadixCache+  -> DB+  -> ResourceT IO (RadixRoot, RadixCache) #-}
src/DFINITY/RadixTree/Serialise.hs view
@@ -1,39 +1,46 @@ {-# LANGUAGE LambdaCase #-}  {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Serialise-   ( decodeLeaf-   , decodeMaybe-   , decodeSide-   , encodeMaybe-   , encodeSide-   ) where+  ( decodeLeaf+  , decodeMaybe+  , decodeSide+  , decodeShort+  , encodeMaybe+  , encodeSide+  , encodeShort+  )+where -import Codec.Serialise (Serialise)-import Codec.Serialise.Decoding (Decoder, TokenType(..), decodeBytes, decodeNull, decodeTag, peekTokenType)-import Codec.Serialise.Encoding (Encoding, encodeBytes, encodeNull, encodeTag)-import Control.Monad (void)-import Data.ByteString.Char8 (ByteString)-import Data.Monoid ((<>))+import Codec.Serialise.Decoding+import Codec.Serialise.Encoding+import Control.Monad+import Data.ByteString+import Data.ByteString.Short  decodeLeaf :: Int -> Decoder s (Maybe ByteString)-decodeLeaf = \ case-   3 -> pure Nothing-   4 -> pure <$> decodeBytes-   _ -> fail "decodeLeaf: invalid argument"+decodeLeaf = \case+  3 -> pure Nothing+  4 -> pure <$> decodeBytes+  _ -> fail "decodeLeaf: invalid argument" -decodeMaybe :: Serialise a => Decoder s a -> Decoder s (Maybe a)-decodeMaybe value = peekTokenType >>= \ case-   TypeNull -> decodeNull >> pure Nothing-   _ -> pure <$> value+decodeMaybe :: Decoder s a -> Decoder s (Maybe a)+decodeMaybe value = peekTokenType >>= \case+  TypeNull -> decodeNull >> pure Nothing+  _        -> pure <$> value  decodeSide :: Decoder s ByteString decodeSide = void decodeTag >> decodeBytes -encodeMaybe :: Serialise a => (a -> Encoding) -> Maybe a -> Encoding+decodeShort :: Decoder s ShortByteString+decodeShort = toShort <$> decodeBytes++encodeMaybe :: (a -> Encoding) -> Maybe a -> Encoding encodeMaybe = maybe encodeNull  encodeSide :: ByteString -> Encoding encodeSide side = encodeTag 42 <> encodeBytes side++encodeShort :: ShortByteString -> Encoding+encodeShort = encodeBytes . fromShort
src/DFINITY/RadixTree/Types.hs view
@@ -1,221 +1,197 @@-{-# LANGUAGE DeriveDataTypeable #-}-{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE DeriveDataTypeable    #-}+{-# LANGUAGE FlexibleInstances     #-} {-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE RecordWildCards #-}+{-# LANGUAGE RecordWildCards       #-}  {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Types-   ( RadixBloom-   , RadixBuffer-   , RadixCache-   , RadixDatabase(..)-   , RadixError(..)-   , RadixNode(..)-   , RadixPrefix(..)-   , RadixProof(..)-   , RadixRoot-   , RadixSearchResult-   , RadixTree(..)-   ) where--import Codec.Serialise as CBOR (Serialise(..), serialise)-import Codec.Serialise.Decoding (decodeBytes, decodeInt, decodeListLen)-import Codec.Serialise.Encoding (encodeBytes, encodeInt, encodeListLen)-import Control.DeepSeq (NFData(..))-import Control.Exception (Exception)-import Control.Monad (void)-import Control.Monad.IO.Class (MonadIO (liftIO))-import Control.Monad.ST (ST)-import Control.Monad.State.Strict as StateT (StateT, get, modify)-import Crypto.Hash.BLAKE2.BLAKE2s (hash)-import Data.BloomFilter (Bloom)-import Data.Bool (bool)-import Data.ByteString.Base16 as Base16 (encode)-import Data.ByteString.Char8 (ByteString, unpack)-import Data.ByteString.Lazy (toStrict)-import Data.ByteString.Short (ShortByteString, fromShort, toShort)-import Data.Data (Data)-import Data.Default.Class (Default(..))-import Data.IORef (IORef, readIORef, modifyIORef')-import Data.List.NonEmpty (NonEmpty(..))-import Data.LruCache (LruCache)-import Data.Map.Strict as Map (Map, insert, lookup)-import Data.Maybe (isJust)-import Data.Monoid ((<>))-import Data.STRef (STRef, readSTRef, modifySTRef')-import Text.Printf (printf)+  ( RadixBuffer+  , RadixCache+  , RadixDatabase(..)+  , RadixError(..)+  , RadixNode(..)+  , RadixPrefix(..)+  , RadixProof(..)+  , RadixRoot+  , RadixSearchResult+  , RadixTree(..)+  )+where -import qualified Database.LevelDB as LevelDB-import qualified Database.LMDB.Simple as LMDB+import Codec.Serialise          as CBOR+import Codec.Serialise.Decoding+import Codec.Serialise.Encoding+import Control.DeepSeq+import Control.Exception+import Control.Monad+import Control.Monad.IO.Class+import Control.Monad.ST+import Data.Bool+import Data.ByteString.Base16   as Base16+import Data.ByteString.Char8    as Strict+import Data.ByteString.Short+import Data.Data+import Data.Default.Class+import Data.IORef+import Data.List                as List+import Data.List.NonEmpty+import Data.LruCache+import Data.Map.Strict          as Map+import Data.Maybe+import Data.STRef+import Data.Word+import Database.LevelDB         as LevelDB+import Text.Printf  import DFINITY.RadixTree.Bits import DFINITY.RadixTree.Serialise -type RadixBloom = Bloom RadixRoot- type RadixBuffer = Map RadixRoot RadixNode  type RadixCache = LruCache RadixRoot RadixNode  class Monad m => RadixDatabase m database where-   load :: database -> ByteString -> m (Maybe ByteString)-   store :: database -> ByteString -> ByteString -> m ()--instance Monad m => RadixDatabase (StateT (Map ByteString ByteString) m) () where-   load () key = Map.lookup key <$> StateT.get-   store () key = StateT.modify . Map.insert key+  load :: database -> ByteString -> m (Maybe ByteString)+  store :: database -> ByteString -> ByteString -> m ()  instance RadixDatabase (ST s) (STRef s (Map ByteString ByteString)) where-   load db key = Map.lookup key <$> readSTRef db-   store db key val = modifySTRef' db $ Map.insert key val+  load db key = Map.lookup key <$> readSTRef db+  store db key val = modifySTRef' db $ Map.insert key val  instance MonadIO m => RadixDatabase m (IORef (Map ByteString ByteString)) where-   load db key = liftIO $ Map.lookup key <$> readIORef db-   store db key val = liftIO $ modifyIORef' db $ Map.insert key val+  load db key = liftIO $ Map.lookup key <$> readIORef db+  store db key val = liftIO $ modifyIORef' db $ Map.insert key val  instance MonadIO m => RadixDatabase m LevelDB.DB where-   load db = LevelDB.get db LevelDB.defaultReadOptions-   store db = LevelDB.put db LevelDB.defaultWriteOptions--instance RadixDatabase (LMDB.Transaction LMDB.ReadWrite) (LMDB.Database ByteString ByteString) where-   load db key = LMDB.get db key-   store db key val = LMDB.put db key $ Just val+  load db = LevelDB.get db LevelDB.defaultReadOptions+  store db = LevelDB.put db LevelDB.defaultWriteOptions -data RadixError-   = InvalidArgument String-   | StateRootDoesNotExist RadixRoot-   deriving (Data, Eq, Show)+data RadixError = InvalidArgument String | StateRootDoesNotExist RadixRoot+  deriving (Data, Eq, Show)  instance Exception RadixError -data RadixNode-   = RadixNode-   { _radixPrefix :: Maybe RadixPrefix-   , _radixLeft :: Maybe RadixRoot-   , _radixRight :: Maybe RadixRoot-   , _radixLeaf :: Maybe ByteString-   } deriving (Data, Eq)+data RadixNode =+  RadixNode+  { _radixPrefix :: Maybe RadixPrefix+  , _radixLeft   :: Maybe RadixRoot+  , _radixRight  :: Maybe RadixRoot+  , _radixLeaf   :: Maybe ByteString+  } deriving (Data, Eq)  instance NFData RadixNode where-   rnf RadixNode {..} =-      rnf _radixPrefix `seq`-      rnf _radixLeft `seq`-      rnf _radixRight `seq`-      rnf _radixLeaf `seq`-      ()+  rnf RadixNode {..} =+    rnf _radixPrefix `seq`+    rnf _radixLeft   `seq`+    rnf _radixRight  `seq`+    rnf _radixLeaf   `seq`+    ()  instance Default RadixNode where-   def = RadixNode Nothing Nothing Nothing Nothing+  def = RadixNode Nothing Nothing Nothing Nothing  instance Serialise RadixNode where-   encode RadixNode {..} =-      encodeListLen len <>-      encodeMaybe CBOR.encode _radixPrefix <>-      encodeMaybe encodeSide left <>-      encodeMaybe encodeSide right <>-      maybe mempty encodeBytes _radixLeaf-      where-      len = bool 3 4 $ isJust _radixLeaf-      left = fromShort <$> _radixLeft-      right = fromShort <$> _radixRight-   decode = do-      len <- decodeListLen-      prefix <- decodeMaybe decode-      left <- decodeMaybe $ toShort <$> decodeSide-      right <- decodeMaybe $ toShort <$> decodeSide-      leaf <- decodeLeaf len-      pure $ RadixNode prefix left right leaf+  encode RadixNode {..} =+    encodeListLen len+      <> encodeMaybe CBOR.encode _radixPrefix+      <> encodeMaybe encodeSide left+      <> encodeMaybe encodeSide right+      <> maybe mempty encodeBytes _radixLeaf+    where+    len   = bool 3 4 $ isJust _radixLeaf+    left  = fromShort <$> _radixLeft+    right = fromShort <$> _radixRight+  decode = do+    len          <- decodeListLen+    _radixPrefix <- decodeMaybe CBOR.decode+    _radixLeft   <- decodeMaybe $ toShort <$> decodeSide+    _radixRight  <- decodeMaybe $ toShort <$> decodeSide+    _radixLeaf   <- decodeLeaf len+    pure $ RadixNode {..}  instance Show RadixNode where-   show node@RadixNode {..} =-      case unpack <$> _radixLeaf of-         Nothing -> printf "\ESC[96m%s\ESC[0m@[\ESC[97m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[96m%s\ESC[0m]" root prefix left right-         Just leaf -> printf "\ESC[96m%s\ESC[0m@[\ESC[97m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[97m%s\ESC[0m]" root prefix left right leaf-      where-      root = format $ hash 20 mempty $ toStrict $ serialise node-      prefix = guard show _radixPrefix-      left = guard format $ fromShort <$> _radixLeft-      right = guard format $ fromShort <$> _radixRight-      guard = maybe "null"-      format = take 8 . unpack . Base16.encode+  show RadixNode {..} =+    case show <$> _radixLeaf of+      Nothing   -> printf "@[\ESC[97m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[96m%s\ESC[0m]" prefix left right+      Just leaf -> printf "@[\ESC[97m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[96m%s\ESC[0m,\ESC[97m%s\ESC[0m]" prefix left right leaf+    where+    prefix  = maybe "null" show                   _radixPrefix+    left    = maybe "null" pretty $ fromShort <$> _radixLeft+    right   = maybe "null" pretty $ fromShort <$> _radixRight+    pretty  = List.take 8 . Strict.unpack . Base16.encode -data RadixPrefix-   = RadixPrefix-   { _radixBitLen :: Int-   , _radixName :: ByteString-   } deriving (Data, Eq)+data RadixPrefix =+  RadixPrefix+  { _radixBitLen :: Int+  , _radixName   :: ShortByteString+  } deriving (Data, Eq)  instance Bitable RadixPrefix where-   toBits RadixPrefix {..} = take _radixBitLen $ toBits _radixName-   fromBits bits = RadixPrefix bitLen name-      where-      bitLen = length bits-      name = fromBits bits+  toBits RadixPrefix {..} = List.take _radixBitLen $ toBits _radixName+  fromBits bits = RadixPrefix bitLen name+    where+    bitLen = List.length bits+    name = fromBits bits  instance NFData RadixPrefix where-   rnf RadixPrefix {..} =-      rnf _radixBitLen `seq`-      rnf _radixName `seq`-      ()+  rnf RadixPrefix {..} =+    rnf _radixBitLen `seq`+    rnf _radixName   `seq`+    ()  instance Serialise RadixPrefix where-   encode RadixPrefix {..} =-      encodeListLen 2 <>-      encodeInt _radixBitLen <>-      encodeBytes _radixName-   decode = do-      void decodeListLen-      bitLen <- decodeInt-      name <- decodeBytes-      pure $ RadixPrefix bitLen name+  encode RadixPrefix {..} =+    encodeListLen 2+      <> encodeInt _radixBitLen+      <> encodeShort _radixName+  decode = do+    void decodeListLen+    RadixPrefix <$> decodeInt <*> decodeShort  instance Show RadixPrefix where-   show = map compress . toBits-      where compress = bool '0' '1'+  show = List.map compress . toBits+    where compress = bool '0' '1' -data RadixProof-   = RadixProof-   { _radixPath :: NonEmpty RadixNode-   , _radixValue :: ByteString-   } deriving (Data, Eq, Show)+data RadixProof =+  RadixProof+  { _radixPath  :: NonEmpty RadixNode+  , _radixValue :: ByteString+  } deriving (Data, Eq, Show)  instance NFData RadixProof where-   rnf RadixProof {..} =-      rnf _radixPath `seq`-      rnf _radixValue `seq`-      ()+  rnf RadixProof {..} =+    rnf _radixPath  `seq`+    rnf _radixValue `seq`+    ()  instance Serialise RadixProof where-   encode RadixProof {..} =-      CBOR.encode path-      where-      RadixNode {..} :| nodes = _radixPath-      node = RadixNode _radixPrefix _radixLeft _radixRight $ Just _radixValue-      path = node :| nodes-   decode = do-      RadixNode {..} :| nodes <- CBOR.decode-      case _radixLeaf of-         Nothing -> fail "no proof value"-         Just value -> do-            let node = RadixNode _radixPrefix _radixLeft _radixRight Nothing-            let path = node :| nodes-            pure $ RadixProof path value+  encode RadixProof {..} =+    CBOR.encode path+    where+    RadixNode {..} :| nodes = _radixPath+    node = RadixNode _radixPrefix _radixLeft _radixRight $ Just _radixValue+    path = node :| nodes+  decode = do+    RadixNode {..} :| nodes <- CBOR.decode+    case _radixLeaf of+      Nothing -> fail "no proof value"+      Just value -> do+        let node = RadixNode _radixPrefix _radixLeft _radixRight Nothing+        let path = node :| nodes+        pure $ RadixProof path value  type RadixRoot = ShortByteString  type RadixSearchResult = (NonEmpty RadixRoot, NonEmpty RadixNode, NonEmpty [Bool], [Bool], [Bool], RadixCache) -data RadixTree database-   = RadixTree-   { _radixBloom :: RadixBloom-   , _radixBloomSize :: Int-   , _radixBuffer :: RadixBuffer-   , _radixCache :: RadixCache-   , _radixCacheSize :: Int-   , _radixCheckpoint :: RadixRoot-   , _radixDatabase :: database-   , _radixNonce :: Word-   , _radixRoot :: RadixRoot-   }+data RadixTree database =+  RadixTree+  { _radixBuffer     :: RadixBuffer+  , _radixCache      :: RadixCache+  , _radixCacheSize  :: Int+  , _radixCheckpoint :: RadixRoot+  , _radixDatabase   :: database+  , _radixNonce      :: Word32+  , _radixRoot       :: RadixRoot+  }
src/DFINITY/RadixTree/Utilities.hs view
@@ -1,46 +1,50 @@ {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module DFINITY.RadixTree.Utilities-   ( createPrefix-   , createRoot-   , createRootFromNonce-   , defaultRoot-   , ignoreIOErrors-   ) where+  ( createParents+  , createPrefix+  , createRoot+  , createRootFromNonce+  , defaultRoot+  , ignoreIOErrors+  )+where -import Codec.Serialise (serialise)-import Control.Exception (handle)-import Crypto.Hash.BLAKE2.BLAKE2s (finalize, hash, initialize, update)-import Data.ByteString as Strict (ByteString)-import Data.ByteString.Builder (toLazyByteString, wordDec)-import Data.ByteString.Lazy as Lazy (ByteString, foldlChunks, toStrict)-import Data.ByteString.Short (toShort)-import Data.Default.Class (def)-import System.IO.Error (IOError)+import Codec.Serialise+import Control.Exception+import Data.ByteArray+import Data.ByteString.Builder+import Data.ByteString.Lazy+import Data.ByteString.Short+import Data.Default.Class+import Data.List               as List+import Data.Word  import DFINITY.RadixTree.Bits+import DFINITY.RadixTree.Hash import DFINITY.RadixTree.Types +createParents+  :: [RadixRoot]+  -> [RadixNode]+  -> [Bool]+  -> [[Bool]]+  -> [(RadixRoot, RadixNode, Bool)]+createParents roots nodes prefix =+  zip3 roots nodes . List.map List.head . List.init . (:) prefix+ createPrefix :: [Bool] -> Maybe RadixPrefix-createPrefix bits =-   if null bits-   then Nothing-   else Just $ fromBits bits+createPrefix bits = if List.null bits then Nothing else Just $ fromBits bits  createRoot :: RadixNode -> RadixRoot-createRoot = toShort . hashLazy 20 . serialise+createRoot = toShort . convert . blake2s160 . toStrict . serialise -createRootFromNonce :: Word -> RadixRoot-createRootFromNonce = toShort . hash 20 mempty . toStrict . toLazyByteString . wordDec+createRootFromNonce :: Word32 -> RadixRoot+createRootFromNonce = toShort . toStrict . toLazyByteString . word32BE  defaultRoot :: RadixRoot defaultRoot = createRoot def -hashLazy :: Int -> Lazy.ByteString -> Strict.ByteString-hashLazy size = finalize size . fold-   where fold = foldlChunks step $ initialize size-         step = flip update- ignoreIOErrors :: IO () -> IO ()-ignoreIOErrors = handle $ (const $ pure () :: IOError -> IO ())+ignoreIOErrors = handle handler+  where handler = const $ return () :: IOError -> IO ()
+ test/._Integrations.hs view

binary file changed (absent → 176 bytes)

+ test/._Properties.hs view

binary file changed (absent → 176 bytes)

+ test/._Tests.hs view

binary file changed (absent → 176 bytes)

+ test/._Types.hs view

binary file changed (absent → 176 bytes)

+ test/._Units.hs view

binary file changed (absent → 176 bytes)

+ test/._tests.json view

binary file changed (absent → 176 bytes)

test/Integrations.hs view
@@ -1,166 +1,176 @@-{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE ExplicitForAll   #-}+{-# LANGUAGE FlexibleContexts #-}+{-# LANGUAGE LambdaCase       #-}+{-# LANGUAGE TypeApplications #-}  {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module Integrations-   ( tests-   , simple-   ) where+  ( tests+  )+where -import Control.Arrow (arr)-import Control.Concurrent.BoundedChan (newBoundedChan, readChan, writeChan)-import Control.Concurrent.MVar (MVar, modifyMVar_, newMVar, readMVar)-import Control.Concurrent.ReadWriteLock (new)-import Control.Monad (foldM, forM_, forever, replicateM, void)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.Trans.Class (lift)-import Control.Monad.Trans.Resource (MonadResource, resourceForkIO, runResourceT)-import Crypto.Hash.BLAKE2.BLAKE2s (hash)-import Data.ByteString.Base16 (encode)-import Data.ByteString.Builder (toLazyByteString, word32BE)-import Data.ByteString.Char8 as Byte (ByteString, length, pack, unpack)-import Data.ByteString.Lazy (toStrict)-import Data.ByteString.Short (fromShort)-import Data.Conduit (ConduitT, (.|), awaitForever, runConduit, yield)-import Data.Conduit.Internal (Pipe(..), sourceToPipe)-import Data.Word (Word32, Word64)-import Database.LevelDB (DB, Options(..), defaultOptions, open)-import System.FilePath ((</>))-import System.IO.Temp (withSystemTempDirectory)-import Test.Tasty (TestTree, testGroup)-import Test.Tasty.QuickCheck (arbitrary, generate)-import Test.Tasty.HUnit (Assertion, assertEqual, testCase)-import Text.Printf (printf)+import Control.Arrow+import Control.Concurrent.BoundedChan+import Control.Concurrent.MVar+import Control.Concurrent.ReadWriteLock+import Control.Monad+import Control.Monad.IO.Class+import Control.Monad.Trans.Class+import Control.Monad.Trans.Resource+import Crypto.Hash+import Data.ByteArray+import Data.ByteString.Base16+import Data.ByteString.Builder+import Data.ByteString.Char8            as Strict+import Data.ByteString.Lazy+import Data.ByteString.Short+import Data.Conduit                     as Conduit+import Data.Conduit.Internal+import Data.List                        as List+import Data.Word+import Database.LevelDB+import System.Clock+import System.FilePath+import System.IO.Temp+import Test.Tasty+import Test.Tasty.HUnit+import Test.Tasty.QuickCheck+import Text.Printf  import DFINITY.RadixTree import DFINITY.RadixTree.Conduit  tests :: TestTree-tests = testGroup "integrations"-   [ testCase "simple-01-001000" $ simple 01 001000-   , testCase "simple-02-005000" $ simple 02 005000-   , testCase "simple-04-010000" $ simple 04 010000-   , testCase "simple-08-025000" $ simple 08 025000-   , testCase "simple-16-050000" $ simple 16 050000-   , testCase "simple-32-100000" $ simple 32 100000-   ]+tests = testGroup+  "integrations"+  [ testCase "simple-01-25000" $ simple 01 25000+  , testCase "simple-01-50000" $ simple 01 50000+  , testCase "simple-02-25000" $ simple 02 25000+  , testCase "simple-02-50000" $ simple 02 50000+  , testCase "simple-04-25000" $ simple 04 25000+  , testCase "simple-04-50000" $ simple 04 50000+  , testCase "simple-08-25000" $ simple 08 25000+  , testCase "simple-08-50000" $ simple 08 50000+  , testCase "simple-16-25000" $ simple 16 25000+  , testCase "simple-16-50000" $ simple 16 50000+  ]  simple :: Int -> Word32 -> Assertion-simple n size = withSystemTempDirectory "test" $ \ path -> do-   -- Create concurrent data structures.-   counter <- newMVar 0-   senders <- replicateM n $ newBoundedChan 64-   receiver <- newBoundedChan 64-   -- Create the source and target database locks.-   sourceLock <- new-   targetLock <- new-   -- Run the deterministic resource allocator.-   runResourceT $ do-      -- Create the source and target trees.-      sourceTree <- create path "source"-      targetTree <- create path "target"-      -- Saturate the source tree.-      sourceTree' <- saturate 1 size sourceTree-      -- Calculate the source tree state root.-      sourceRoot' <- fst <$> merkleizeRadixTree sourceTree'-      liftIO $ printf "source: %s\n" $ pretty sourceRoot'-      -- Create thread to relay updates.-      void $ resourceForkIO $ liftIO $ forever $ do-         update <- readChan receiver-         forM_ senders $ flip writeChan update-      -- Define the state synchronization conduits.-      let masks = genMasks n-      let zipper mask sender = sourceRadixTree mask 2048 sender sourceTree' sourceLock-      let source = merge $ zipWith zipper masks senders-      let sink = sinkRadixTree sourceRoot' receiver targetTree targetLock-      -- Run the state synchronization protocol.-      result <- runConduit $ source .| bandwidth counter .| sink-      -- Inspect the result.-      case result of-         Left _ -> fail "missing subtrees"-         Right targetTree' -> do-            -- Calculate the target tree state root.-            targetRoot' <- fst <$> merkleizeRadixTree targetTree'-            liftIO $ printf "target: %s\n" $ pretty targetRoot'-            -- Display bandwidth utilization.-            total <- liftIO $ readMVar counter-            liftIO $ printf "bandwidth: %d bytes\n" total-            -- Assert the source and target tree state roots as equal.-            liftIO $ assertEqual "simple" sourceRoot' targetRoot'+simple n size = withSystemTempDirectory "test" $ \path -> do+  -- Create concurrent data structures.+  counter    <- newMVar 0+  senders    <- replicateM n $ newBoundedChan 64+  receiver   <- newBoundedChan 64+  -- Create the source and target database locks.+  sourceLock <- new+  targetLock <- new+  -- Run the deterministic resource allocator.+  runResourceT $ do+    -- Create the source and target trees.+    sourceTree  <- createRadixTree' path "source"+    targetTree  <- createRadixTree' path "target"+    -- Saturate the source tree.+    sourceTree' <- saturate 1 size sourceTree+    -- Calculate the source tree state root.+    sourceRoot' <- fst <$> merkleizeRadixTree sourceTree'+    liftIO $ printf "\n      source: %s\n" $ pretty sourceRoot'+    -- Create thread to relay updates.+    void $ resourceForkIO $ liftIO $ forever $ do+      update <- readChan receiver+      forM_ senders $ flip writeChan update+    -- Define the state synchronization conduits.+    let bitmasks = genBitmasks n+    let zipper mask sender =+          sourceRadixTree mask 2048 sender sourceTree' sourceLock+    let source = merge $ List.zipWith zipper bitmasks senders+    let sink   = sinkRadixTree sourceRoot' receiver targetTree targetLock+    -- Run the state synchronization protocol.+    begin  <- liftIO $ getTime Monotonic+    result <- runConduit $ source .| bandwidth counter .| sink+    end    <- liftIO $ getTime Monotonic+    -- Inspect the result.+    case result of+      Left  _           -> fail "simple: missing subtrees"+      Right targetTree' -> do+        -- Calculate the target tree state root.+        targetRoot' <- fst <$> merkleizeRadixTree targetTree'+        liftIO $ printf "      target: %s\n" $ pretty targetRoot'+        -- Display bandwidth utilization.+        bytes <- liftIO $ readMVar counter+        let mbits   = 8 * realToFrac bytes / 1000000+        let nanos   = toNanoSecs end - toNanoSecs begin+        let seconds = realToFrac nanos / 1000000000+        let mbps    = mbits / seconds :: Double+        liftIO $ printf "      bandwidth: %.03f megabits per second\n" mbps+        -- Assert the source and target tree state roots as equal.+        liftIO $ assertEqual "simple" sourceRoot' targetRoot' -create-   :: MonadResource m-   => FilePath-   -> String-   -> m (RadixTree DB)-create path name = do-   handle <- open database options-   createRadixTree 262144 2028 Nothing handle-   where-   database = path </> name-   options = defaultOptions {createIfMissing = True}+createRadixTree' :: MonadResource m => FilePath -> String -> m (RadixTree DB)+createRadixTree' path name = do+  handle <- open database options+  liftIO $ createRadixTree 2028 Nothing handle+ where+  database = path </> name+  options  = defaultOptions { createIfMissing = True }  saturate-   :: MonadIO m-   => RadixDatabase m database-   => Word32-   -> Word32-   -> RadixTree database-   -> m (RadixTree database)-saturate a b tree =-   foldM step tree [a..b]-   where-   step accum x = do-      let key = hashW32 x-      value  <- liftIO $ generate $ pack <$> arbitrary-      accum' <- insertRadixTree key value accum-      if mod x 1000 == 0-      then snd <$> merkleizeRadixTree accum'-      else pure accum'+  :: MonadIO m+  => RadixDatabase m database+  => Word32+  -> Word32+  -> RadixTree database+  -> m (RadixTree database)+saturate a b tree = foldM step tree [a .. b]+ where+  step accum x = do+    let key = hashW32 x+    value  <- liftIO $ generate $ Strict.pack <$> arbitrary+    accum' <- insertRadixTree key value accum+    if mod x 1000 == 0 then snd <$> merkleizeRadixTree accum' else pure accum' -merge-   :: Monad m-   => [ConduitT () o m ()]-   -> ConduitT () o m ()-merge =-   loop . map sourceToPipe-   where-   loop pipes = do-      pipes' <- foldM step [] pipes-      if null pipes'-      then pure ()-      else loop pipes'-   step accum = \ case-      Done () ->-         pure accum-      HaveOutput pipe value -> do-         yield value-         pure $ pipe:accum-      PipeM action -> do-         pipe <- lift action-         step accum pipe-      _ -> fail $ "merge: undefined"+merge :: Monad m => [ConduitT () o m ()] -> ConduitT () o m ()+merge = go . List.map sourceToPipe+ where+  go pipes = do+    pipes' <- foldM step [] pipes+    if List.null pipes' then pure () else go pipes'+  step accum = \case+    Done ()               -> pure accum+    HaveOutput next value -> do+      Conduit.yield value+      pure $ next : accum+    PipeM action -> do+      next <- lift action+      step accum next+    _ -> fail "merge: undefined"  bandwidth-   :: MonadIO m-   => MVar Word64-   -> ConduitT ByteString ByteString m ()-bandwidth counter =-   awaitForever $ \ bytes -> do-      let size = fromIntegral $ Byte.length bytes-      liftIO $ modifyMVar_ counter $ \ accum ->-         pure $! accum + size-      yield bytes+  :: MonadIO m+  => MVar Word64+  -> ConduitT Strict.ByteString Strict.ByteString m ()+bandwidth counter = Conduit.awaitForever $ \bytes -> do+  let size = fromIntegral $ Strict.length bytes+  liftIO $ modifyMVar_ counter $ \accum -> pure $! accum + size+  Conduit.yield bytes  pretty :: RadixRoot -> String-pretty = unpack . encode . fromShort+pretty = Strict.unpack . encode . fromShort -hashW32 :: Word32 -> ByteString-hashW32 = hash 32 mempty . toStrict . toLazyByteString . word32BE+hashW32 :: Word32 -> Strict.ByteString+hashW32 =+  convert+    . id @(Digest Blake2s_160)+    . hash+    . toStrict+    . toLazyByteString+    . word32BE -genMasks :: Int -> [[Bool]]-genMasks n = take n $ concat $ repeat xs-   where-   i  = truncate $ logBase 2 $ (realToFrac n :: Double)-   xs = [zipWith arr fs $ replicate i True | fs <- replicateM i [id, not]]+genBitmasks :: Int -> [[Bool]]+genBitmasks n = List.take n $ List.concat $ List.repeat xs+ where+  i = truncate $ logBase 2 $ (realToFrac n :: Double)+  xs =+    [ List.zipWith arr fs $ List.replicate i True+    | fs <- replicateM i [id, not]+    ]
test/Properties.hs view
@@ -1,194 +1,178 @@-{-# LANGUAGE LambdaCase #-}+{-# LANGUAGE LambdaCase        #-} {-# LANGUAGE OverloadedStrings #-} -{-# OPTIONS -Wall #-}--{- |-This module contains a (very simple) property based test for the RadixTree data-structure.--It uses QuickCheck to generate a list of operations (insert, delete, lookup),-executes them both against- * "Data.Map" as a known-to-be-good specification and- * RadixTree (with "Data.Map" as the backend)-records the resulting values in each case and compares these lists.--This is very rudimentary. In particular, 'generateOps' can be further tweaked-to produce “interesting” sequences -- there is little (but some) value in-deleting mostly entries that are not there.--You can sample what 'generateOps' produces by opening this file in ghci-(e.g. cabal new-repl property-tests) and then running @sample generateOps@.+{-# OPTIONS -Wall        #-}+{-# OPTIONS -Wno-orphans #-} --}-module Properties (tests) where+module Properties+  ( tests+  )+where -import qualified Data.Map as M-import Data.Maybe (isJust)-import Data.ByteString.Char8 (ByteString, pack)-import Data.ByteString.Short (fromShort)+import Control.Monad.Identity+import Control.Monad.State.Strict+import Data.Bifunctor+import Data.ByteString.Char8      as Strict+import Data.ByteString.Short+import Data.List                  as List+import Data.Map                   as Map+import Data.Maybe import Test.QuickCheck import Test.Tasty import Test.Tasty.QuickCheck-import Data.List-import Data.Bifunctor-import Control.Monad.State.Strict  import DFINITY.RadixTree import Types -{--In this module we test the RadixTree module against a pure implementation of-a map (Data.Map). We generate random sequences of Insert, Delete and Lookup-calls, run them in both implementations, and compare the results.- -}--generateOps :: Gen [Op]-generateOps = do-    -- Create a small, non-zero number of keys to consider-    len <- getSmall . getPositive <$> arbitrary-    keys <- vectorOf len arbBS-    let pickKey = elements keys-    listOf $ frequency-        [ (1, Insert <$> pickKey <*> arbBS)-        , (1, Delete <$> pickKey)-        , (2, Lookup <$> pickKey <*> pure Nothing)-        ]--arbBS :: Gen ByteString-arbBS = pack <$> arbitrary-+instance Arbitrary ByteString where+  arbitrary = Strict.pack <$> arbitrary -runPure :: [Op] -> [Maybe ByteString]-runPure ops = snd $ mapAccumL go M.empty ops-  where-    go m (Insert k v) = (M.insert k v m, Nothing)-    go m (Delete k  ) = (M.delete k m,   Nothing)-    go m (Lookup k _) = (m,              M.lookup k m)+{-+Here we provide a test to show that the radix tree satisfies the basic+properties of an associative array. Random sequences of insert, delete, and+lookup operations are generated and applied to both the radix tree and a+reference implementation of an associative array. We then compare the results+for equality.+-} +genOps :: Gen [Op]+genOps = do+  len <- getSmall . getPositive <$> arbitrary+  key <- elements <$> vectorOf len arbitrary+  listOf $ frequency+    [ (2, Insert <$> key <*> arbitrary)+    , (2, Delete <$> key)+    , (4, Lookup <$> key <*> pure Nothing)+    , (1, pure $ Merkleize Nothing)+    ] -type M = State (M.Map ByteString ByteString)+runReference :: [Op] -> [Maybe ByteString]+runReference ops = snd $ List.mapAccumL go Map.empty ops+ where+  go accum (Insert key value) = (Map.insert key value accum, Nothing)+  go accum (Delete key      ) = (Map.delete key accum, Nothing)+  go accum (Lookup key _    ) = (accum, Map.lookup key accum)+  go accum (Merkleize _     ) = (accum, Nothing) -runRadix :: [Op] -> [Maybe ByteString]-runRadix ops0 = evalState (initTree >>= go ops0) M.empty-  where-    go :: [Op] -> RadixTree () -> M [Maybe ByteString]-    go []                 _ = return []-    go (Insert k v : ops) t = do-        t' <- insertRadixTree k v t-        (Nothing :) <$> go ops t'-    go (Delete k   : ops) t = do-        t' <- deleteRadixTree k t-        (Nothing :) <$> go ops t'-    go (Lookup k _ : ops) t =-        lookupRadixTree k t >>= \case-            Nothing     -> (Nothing :) <$> go ops t-            Just (v,t') -> (Just v :)  <$> go ops t'+runRadixTree :: [Op] -> [Maybe ByteString]+runRadixTree ops = flip evalState Map.empty $ unMapDB $ initTree >>= go ops+ where+  go []                           _    = return []+  go (Insert key value : residue) tree = do+    tree' <- insertRadixTree key value tree+    (:) Nothing <$> go residue tree'+  go (Delete key : residue) tree = do+    tree' <- deleteRadixTree key tree+    (:) Nothing <$> go residue tree'+  go (Lookup key _ : residue) tree = do+    result <- lookupRadixTree key tree+    case result of+      Nothing             -> (Nothing :) <$> go residue tree+      Just (value, tree') -> (Just value :) <$> go residue tree'+  go (Merkleize _ : residue) tree = do+    tree' <- snd <$> merkleizeRadixTree tree+    (:) Nothing <$> go residue tree'  prop_lookup :: Property-prop_lookup  = forAll generateOps $ \ops ->-    runPure ops === runRadix ops+prop_lookup = forAll genOps $ \ops -> runReference ops === runRadixTree ops  {--We want to test if two different ways of generating the same map yield the same-state root. We first generate one final state (a Data.Map). Then we generate two-different set of operations that should yield that state. Then we run them and-compare the output.+Here we provide a test to show that the contents of a radix tree is uniquely+defined by its root hash, regardless of the order of operations applied. Random+sequences sequences of insert, delete, lookup, and merkelize operations are+generated and applied in random order to the same tree. The final root hashs are+then calculated and tested for equality. -} -genMap :: Gen (M.Map ByteString ByteString)-genMap = M.fromList . map (bimap pack pack) . M.toList <$> arbitrary+genMap :: Gen (Map ByteString ByteString)+genMap = fromList . List.map convert . toList <$> arbitrary+  where convert = bimap Strict.pack Strict.pack -genOpsForMap :: M.Map ByteString ByteString -> Gen [Op]+genOpsForMap :: Map ByteString ByteString -> Gen [Op] genOpsForMap m = do-    inserts <- forM (M.toList m) $ \(k,v) -> do-        ops <- genOpsForKey k-        return $ ops ++ [ Insert k v ]-    -- Extra keys (which we delete as the last action)-    extra_keys <- listOf $ arbBS `suchThat` (`M.notMember` m)-    deletes <- forM extra_keys $ \k -> do-        ops <- genOpsForKey k-        return $ ops ++ [ Delete k ]-    interleaves (inserts ++ deletes)-  where-    genOpsForKey k = listOf (oneof [ Insert k <$> arbBS , pure (Delete k) ])-+  inserts <- forM (toList m) $ \(k, v) -> do+    ops <- genOpsForKey k+    return $ ops ++ [Insert k v]+  -- Extra keys (which we delete as the last action)+  extra_keys <- listOf $ arbitrary `suchThat` (`Map.notMember` m)+  deletes    <- forM extra_keys $ \k -> do+    ops <- genOpsForKey k+    return $ ops ++ [Delete k]+  interleaves (inserts ++ deletes)+ where+  genOpsForKey k = listOf (oneof [Insert k <$> arbitrary, pure (Delete k)]) --- TODO interleaves :: [[a]] -> Gen [a] interleaves xss = frequency'-    [ (length (x:xs), (x:) <$> interleaves (xs : rest))-    | ((x:xs):rest) <- rots xss ]+  [ (List.length (x : xs), (x :) <$> interleaves (xs : rest))+  | ((x : xs) : rest) <- rots xss+  ]  where-   frequency' [] = return []-   frequency' xs = frequency xs-   rots xs = tail $ zipWith (++) (tails xs) (inits xs)---type TreeGenOps = [ (ByteString, [Maybe ByteString]) ]+  frequency' [] = return []+  frequency' xs = frequency xs+  rots xs = List.tail $ List.zipWith (++) (List.tails xs) (List.inits xs)  prop_stateRoot :: Property-prop_stateRoot = forAll genMap $ \m ->-    forAll (genOpsForMap m) $ \ops1 ->-    forAll (genOpsForMap m) $ \ops2 ->-    run ops1 === run ops2-  where-    run :: [Op] -> ByteString-    run ops0 = evalState (initTree >>= go ops0) M.empty-      where-        go :: [Op] -> RadixTree () -> M ByteString-        go []                 t = fromShort . fst <$> merkleizeRadixTree t-        go (Insert k v : ops) t = insertRadixTree k v t >>= go ops-        go (Delete k   : ops) t = deleteRadixTree k t   >>= go ops-        go (Lookup _ _ : _  ) _ = error "no lookup in this test please"+prop_stateRoot = forAll genMap $ \m -> forAll (genOpsForMap m)+  $ \ops1 -> forAll (genOpsForMap m) $ \ops2 -> run ops1 === run ops2+ where+  run :: [Op] -> ByteString+  run ops0 = evalState (unMapDB $ initTree >>= go ops0) Map.empty+   where+    go :: [Op] -> RadixTree () -> PureMapDB ByteString+    go []                 t = fromShort . fst <$> merkleizeRadixTree t+    go (Insert k v : ops) t = insertRadixTree k v t >>= go ops+    go (Delete k   : ops) t = deleteRadixTree k t >>= go ops+    go (Lookup _ _ : _  ) _ = error "no lookup in this test please"+    go _                  _ = error "Cannot be reached (GADT pattern match)"  -- | 'createRadixProof' should find the same value as 'lookupRadixTree' prop_proofLookup :: Property prop_proofLookup = forAll arbitrary $ \keyStr ->-  let key = pack keyStr+  let key      = Strict.pack keyStr       proofRes = lookupProof key       radixRes = lookupRadix key-   in isJust proofRes && isJust radixRes-      && proofRes == radixRes-  where-    run = flip evalState M.empty-    lookupProof k = run $ do-      tree <- initTree-      tree' <- insertRadixTree k (mappend k "suffix") tree-      (_, mTree) <- merkleizeRadixTree tree'-      fmap (getValue . fst) <$> createRadixProof k mTree +  in  isJust proofRes && isJust radixRes && proofRes == radixRes+ where+  run = flip (evalState . unMapDB) Map.empty+  lookupProof k = run $ do+    tree       <- initTree+    tree'      <- insertRadixTree k (mappend k "suffix") tree+    (_, mTree) <- merkleizeRadixTree tree'+    fmap (getValue . fst) <$> createRadixProof k mTree -    lookupRadix k = run $ do-      tree <- initTree-      tree' <- insertRadixTree k (mappend k "suffix") tree-      fmap fst <$> lookupRadixTree k tree'+  lookupRadix k = run $ do+    tree  <- initTree+    tree' <- insertRadixTree k (mappend k "suffix") tree+    fmap fst <$> lookupRadixTree k tree'  prop_proofValid :: Property prop_proofValid = forAll arbitrary $ \keyPrefixStr ->-  let keyPrefix = pack keyPrefixStr+  let keyPrefix          = Strict.pack keyPrefixStr       (key, proof, root) = lookupProof keyPrefix-   in case proof of-    Nothing -> False-    Just p -> verifyRadixProof key root p-  where-    run = flip evalState M.empty-    lookupProof kp = run $ do-      tree <- initTree-      tree' <- insertRadixTree (mappend kp "1") "body1" tree-      tree'' <- insertRadixTree (mappend kp "12") "body2" tree'-      let key = mappend kp "123"-      tree''' <- insertRadixTree key "body3" tree''-      (root, mTree) <- merkleizeRadixTree tree'''-      proof <- fmap fst <$> createRadixProof key mTree-      pure (key, proof, root)+  in  case proof of+        Nothing -> False+        Just p  -> verifyRadixProof key root p+ where+  run = flip (evalState . unMapDB) Map.empty+  lookupProof kp = run $ do+    tree   <- initTree+    tree'  <- insertRadixTree (mappend kp "1") "body1" tree+    tree'' <- insertRadixTree (mappend kp "12") "body2" tree'+    let key = mappend kp "123"+    tree'''       <- insertRadixTree key "body3" tree''+    (root, mTree) <- merkleizeRadixTree tree'''+    proof         <- fmap fst <$> createRadixProof key mTree+    pure (key, proof, root)  tests :: TestTree-tests = testGroup "Property tests"-    [ testProperty "lookup" prop_lookup-    , testProperty "contents" prop_stateRoot-    , testProperty "createRadixProof ~ lookupRadixTree" prop_proofLookup-    , testProperty "createRadixProofs are always valid" prop_proofValid-    ]+tests = testGroup+  "quickcheck"+  [ testProperty "lookup"                             prop_lookup+  , testProperty "contents"                           prop_stateRoot+  , testProperty "createRadixProof ~ lookupRadixTree" prop_proofLookup+  , testProperty "createRadixProofs are always valid" prop_proofValid+  ] -initTree :: M (RadixTree ())-initTree = createRadixTree 262144 2028 Nothing ()+initTree :: PureMapDB (RadixTree ())+initTree = createRadixTree 2028 Nothing ()
test/Tests.hs view
@@ -1,14 +1,12 @@+{-# OPTIONS -Wall #-}+ import Test.Tasty -import Integrations as Integration (tests)-import Properties as Property (tests)-import Units as Unit (tests)+import Integrations as Integration+import Properties   as Property+import Units        as Unit  main :: IO () main = do-   units <- Unit.tests-   defaultMain $ testGroup "tests"-      [ Integration.tests-      , Property.tests-      , units-      ]+  units <- Unit.tests+  defaultMain $ testGroup "tests" [Integration.tests, Property.tests, units]
test/Types.hs view
@@ -1,67 +1,88 @@-{-# LANGUAGE LambdaCase #-}-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE DeriveFunctor              #-}+{-# LANGUAGE FlexibleContexts           #-}+{-# LANGUAGE FlexibleInstances          #-}+{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE LambdaCase                 #-}+{-# LANGUAGE MultiParamTypeClasses      #-}+{-# LANGUAGE OverloadedStrings          #-}  {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module Types-   ( Op(..)-   ) where+  ( Op(..)+  , MapDB(..)+  , PureMapDB+  , IOMapDB+  )+where -import Control.Monad (mzero)-import Data.Aeson (FromJSON(..), Object, Value(..))-import Data.ByteString.Base16 (decode, encode)-import Data.ByteString.Char8 (ByteString, unpack)-import Data.HashMap.Strict as HashMap (lookup)-import Data.Text as Text (Text, drop)-import Data.Text.Encoding (encodeUtf8)+import Control.Monad+import Control.Monad.Identity+import Control.Monad.IO.Class+import Control.Monad.State.Strict+import Data.Aeson+import Data.ByteString.Base16     as Base16+import Data.ByteString.Char8      as Strict+import Data.HashMap.Strict        as HashMap+import Data.Map                   as Map+import Data.Text                  as Text+import Data.Text.Encoding +import DFINITY.RadixTree+ data Op-   = Insert ByteString ByteString-   | Delete ByteString-   | Lookup ByteString (Maybe ByteString)-   | Merkleize ByteString+  = Insert ByteString ByteString+  | Delete ByteString+  | Lookup ByteString (Maybe ByteString)+  | Merkleize (Maybe ByteString)  instance FromJSON Op where-   parseJSON = \ case-      Object object -> maybe mzero pure $ parse object-      _ -> mzero+  parseJSON = \ case+    Object obj -> maybe mzero pure $ parse obj+    _          -> mzero  instance Show Op where-   show = \ case-      Insert key value ->-         "Insert" ++ pretty key ++ pretty value-      Delete key ->-         "Delete" ++ pretty key-      Lookup key value ->-         "Lookup" ++ pretty key ++ maybe " null" pretty value-      Merkleize value ->-         "Merkleize" ++ pretty value-      where pretty = mappend " 0x" . unpack . encode+  show = \ case+    Insert key value -> "Insert"    ++ pretty key ++ pretty value+    Delete key       -> "Delete"    ++ pretty key+    Lookup key value -> "Lookup"    ++ pretty key ++ maybe " null" pretty value+    Merkleize  value -> "Merkleize" ++ maybe " null" pretty value+    where pretty = mappend " 0x" . Strict.unpack . Base16.encode  parse :: Object -> Maybe Op-parse object = do-   op <- HashMap.lookup "op" object-   case op of-      "set" -> do-         key <- get "key" object-         value <- get "value" object-         pure $ Insert key value-      "delete" -> do-         key <- get "key" object-         pure $ Delete key-      "get" -> do-         key <- get "key" object-         let value = get "value" object-         pure $ Lookup key value-      "stateRoot" -> do-         value <- get "value" object-         pure $ Merkleize value-      _ -> Nothing+parse obj = do+  op <- HashMap.lookup "op" obj+  case op of+    "set" -> do+      key <- view obj "key"+      val <- view obj "value"+      pure $ Insert key val+    "delete" -> do+      key <- view obj "key"+      pure $ Delete key+    "get" -> do+      key <- view obj "key"+      let val = view obj "value"+      pure $ Lookup key val+    "stateRoot" -> do+      let val = view obj "value"+      pure $ Merkleize val+    _ -> Nothing -get :: Text -> Object -> Maybe ByteString-get key object = do-   value <- HashMap.lookup key object-   case value of-      String text -> Just $ fst $ decode $ encodeUtf8 $ Text.drop 2 text-      _ -> Nothing+view :: Object -> Text -> Maybe ByteString+view obj key = do+  val <- HashMap.lookup key obj+  case val of+    String text -> Just $ fst $ Base16.decode $ encodeUtf8 $ Text.drop 2 text+    _           -> Nothing++newtype MapDB m a+  = MapDB { unMapDB :: StateT (Map ByteString ByteString) m a }+  deriving (Functor, Applicative, Monad, MonadIO, MonadTrans)++instance Monad m => RadixDatabase (MapDB m) () where+  load  _ key     = MapDB $ Map.lookup key <$> get+  store _ key val = MapDB $ modify $ Map.insert key val++type PureMapDB = MapDB Identity+type IOMapDB = MapDB IO
test/Units.hs view
@@ -1,71 +1,78 @@ {-# LANGUAGE OverloadedStrings #-}  {-# OPTIONS -Wall #-}-{-# OPTIONS -Werror #-}  module Units-   ( tests-   ) where+  ( tests+  )+where -import Control.Arrow (first)-import Control.Monad (foldM_, void)-import Control.Monad.IO.Class (MonadIO(..))-import Control.Monad.State.Strict (StateT, runStateT)-import Data.Aeson (eitherDecode)-import Data.ByteString.Char8 (ByteString)-import Data.ByteString.Lazy.Char8 as Lazy (readFile)-import Data.ByteString.Short (fromShort)-import Data.HashMap.Strict (toList)-import Data.Map.Strict (Map, empty)-import Data.Maybe (fromJust)-import Test.Tasty (TestTree, testGroup)-import Test.Tasty.HUnit (assertFailure, testCase)+import Control.Arrow+import Control.Monad+import Control.Monad.IO.Class+import Control.Monad.State.Strict+import Data.Aeson+import Data.ByteString.Char8      as Strict+import Data.ByteString.Lazy.Char8 as Lazy+import Data.ByteString.Short+import Data.HashMap.Strict+import Data.List                  as List+import Data.Maybe+import Test.Tasty+import Test.Tasty.HUnit  import DFINITY.RadixTree import Types  tests :: IO TestTree tests = do-   contents <- Lazy.readFile "test/tests.json"-   vectors <- either fail return $ eitherDecode contents-   pure $ testGroup "units"-      [testCase name $ run ops | (name, ops) <- toList vectors]+  contents <- Lazy.readFile "test/tests.json"+  vectors  <- either fail return $ eitherDecode contents+  pure $ testGroup "units"+                   [ testCase name $ run ops | (name, ops) <- toList vectors ]  run :: [Op] -> IO ()-run ops = void $ flip runStateT empty $ do-   tree <- createRadixTree 262144 2048 Nothing ()-   foldM_ step tree ops+run ops = void $ flip (runStateT . unMapDB) mempty $ do+  tree <- createRadixTree 2048 Nothing ()+  foldM_ step tree ops -step :: RadixTree () -> Op -> StateT (Map ByteString ByteString) IO (RadixTree ())+step :: RadixTree () -> Op -> IOMapDB (RadixTree ()) step tree op = do-   liftIO $ print op-   case op of-      Insert key value -> do-         tree' <- insertRadixTree key value tree-         printRadixTree tree'-         pure tree'-      Delete key -> do-         tree' <- deleteRadixTree key tree-         printRadixTree tree'-         pure tree'-      Lookup key value -> do-         result <- lookupRadixTree key tree-         case result of-            Nothing | value == Nothing -> pure tree-            Nothing -> throw-               ["Expecting value ", ", but received no value for key "]-               [fromJust value, key]-            Just (value', tree') | value == Just value' -> pure tree'-            Just (value', _) -> throw-               ["Expecting value ", ", but received value ", " for key "]-               [maybe "null" id value, value', key]-      Merkleize value -> do-         (value', tree') <- first fromShort <$> merkleizeRadixTree tree-         if value == value'-         then pure tree'-         else throw-            ["Expecting state root ", ", but received state root "]-            [value, value']+  liftIO $ print op+  case op of+    Insert key value -> do+      tree' <- insertRadixTree key value tree+      printRadixTree tree'+      pure tree'+    Delete key -> do+      tree' <- deleteRadixTree key tree+      printRadixTree tree'+      pure tree'+    Lookup key value -> do+      result <- lookupRadixTree key tree+      case result of+        Nothing | isNothing value -> pure tree+        Nothing                   -> throw+          ["Expecting value ", ", but received no value for key "]+          [fromJust value, key]+        Just (value', tree') | value == Just value' -> pure tree'+        Just (value', _)                            -> throw+          ["Expecting value ", ", but received value ", " for key "]+          [fromMaybe "null" value, value', key]+    Merkleize Nothing -> do+      (_, tree') <- first fromShort <$> merkleizeRadixTree tree+      pure tree'+    Merkleize (Just value) -> do+      (value', tree') <- first fromShort <$> merkleizeRadixTree tree+      if value == value'+        then pure tree'+        else throw ["Expecting state root ", ", but received state root "]+                   [value, value'] -throw :: MonadIO m => [String] -> [ByteString] -> m a-throw err = liftIO . assertFailure . concat . zipWith mappend err . map show+throw :: MonadIO m => [String] -> [Strict.ByteString] -> m a+throw err =+  liftIO+    . assertFailure+    . List.concat+    . List.zipWith mappend err+    . List.map show