Mercurial > repos > bgruening > prinseq
changeset 0:9790cfb46d03 draft default tip
Uploaded
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/COPYING Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/create_index.py Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import os +import sys + +o = open( sys.argv[1], 'w+' ) + + +o.write('<html> <body> <h1> InterProScan result summary page </h1> <ul>' ) + +for filename in [f for f in os.listdir( sys.argv[2] ) if os.path.isfile( os.path.join( sys.argv[2], f) )]: + o.write( '<li><a href="%s"> %s </a></li>' % ( filename, os.path.splitext( filename )[0] ) ) + +o.write( '</ul></body></html>' ) +o.close()
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prinseq-graphs-noPCA.pl Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,2655 @@ +#!/usr/bin/perl + +#=============================================================================== +# Author: Robert SCHMIEDER, Computational Science Research Center @ SDSU, CA +# +# File: prinseq-graphs +# Date: 2012-12-22 +# Version: 0.6 graphs +# +# Usage: +# prinseq-graphs [options] +# +# Try 'prinseq-graphs-noPCA -h' for more information. +# +# Purpose: PRINSEQ will help you to preprocess your genomic or metagenomic +# sequence data in FASTA or FASTQ format. The graphs version allows +# users of the lite version to generate graphs similar to the web +# version. +# +# Bugs: Please use http://sourceforge.net/tracker/?group_id=315449 +# +#=============================================================================== + +use strict; +use warnings; + +use Getopt::Long; +use Pod::Usage; +use File::Temp qw(tempfile); #for output files +use Fcntl qw(:flock SEEK_END); #for log file +use Cwd; +use JSON; +use Cairo; +#use Statistics::PCA; +use MIME::Base64; +use File::Basename; +use Data::Dumper; ### + +$| = 1; # Do not buffer output + +my $PI = 4 * atan2(1, 1); +my $LOG62 = log(62); +my $DINUCODDS_VIR = [ + [qw(1.086940308 0.98976932 1.034167044 0.880024041 1.070421277 0.990687084 0.890945575 1.069957074 0.92465631 0.803973303)], + [qw(1.101064857 0.986812783 1.038299155 0.896162618 1.081652847 0.976365237 0.867445186 1.06727283 0.94688543 0.768007295)], + [qw(1.071548411 0.912204166 1.196914981 0.80628184 1.294201511 1.148517794 0.269295791 1.033948026 0.895951033 0.623192149)], + [qw(1.090253719 0.907428629 1.203991784 0.786359294 1.281499107 1.145421568 0.235974709 1.033437274 0.899580091 0.631699771)], + [qw(1.075864745 1.003413074 1.01872902 0.897841689 0.980373171 1.05854979 0.934262259 1.052477953 0.88145851 0.889239724)], + [qw(1.101890467 1.030028291 1.019912674 0.84191395 1.0015174 1.069546264 0.900151602 0.996269395 0.889195343 0.904039022)], + [qw(1.152417359 0.855028574 0.91164793 1.017415486 1.114163672 1.128353311 0.846355573 0.916745489 1.206820475 0.811014651)], + [qw(1.142454218 0.8635465 0.923406967 1.026242747 1.134445058 1.131747833 0.79793368 0.920767641 1.179468556 0.799770057)], + [qw(1.124462747 0.873556143 0.945627041 1.013755408 1.159866153 1.096259526 0.757315047 0.972924919 1.105562567 0.772731886)], + [qw(1.143826972 0.866968779 0.995740249 0.945859278 1.109590621 1.089305083 0.76048874 0.971561388 1.157101408 0.792923027)], + [qw(1.131900141 0.82776996 0.996204924 0.999433455 1.024692372 1.071176333 0.921026216 1.088936699 1.054010776 0.773498892)], + [qw(1.042180476 0.930180412 1.019242897 0.98909997 1.006666828 1.046708539 0.959492164 1.011183418 1.055168776 0.937433818)], + [qw(1.086515695 0.985345815 0.930914307 0.969581792 1.043010232 1.087463712 0.939482285 0.990551965 0.954752469 0.893972874)], + [qw(1.096657826 0.950117614 0.936195529 0.965619788 1.114975275 1.077011195 0.843153131 0.989128406 1.043790912 0.840634731)], + [qw(1.158030995 0.935307365 0.874812261 1.056236525 1.117171274 0.937484692 1.057442372 0.970079538 1.174848738 0.725071711)], + [qw(1.15591506 0.93000227 0.883538923 1.0567652 1.095730954 0.944489906 1.074229471 0.983993745 1.156051409 0.726688465)], + [qw(1.205726473 0.924439339 1.049457756 0.805718412 0.975472778 1.07581991 0.726992211 1.075025787 0.8704929 0.726672843)], + [qw(1.188544681 0.95239611 1.049066985 0.790031334 1.038632598 1.056749787 0.665197397 1.057566244 0.862429061 0.708982398)], + [qw(1.063631482 0.925593715 1.014869316 0.944904401 1.119690731 1.325971834 0.273781451 0.943347677 1.06438014 0.920825904)], + [qw(1.077560287 0.911888545 1.044147857 0.927758054 1.058535939 1.296838544 0.421514996 0.945722451 1.128317986 0.926419928)], + [qw(1.163753415 0.989905668 0.893599328 0.955641844 1.176047687 0.941559156 0.950641089 0.959741692 1.100815282 0.72491925)], + [qw(1.139253929 0.946297517 0.922096125 1.024801537 1.205206793 0.968818717 0.915801342 0.971626058 1.107569276 0.627623404)] + ]; +my $DINUCODDS_MIC = [ + [qw(1.13127323 0.853587195 0.911041047 1.104520778 1.065586428 1.021434164 0.999734139 1.063684014 1.078035184 0.733596552)], + [qw(1.173267344 0.840539337 0.919534602 1.068050141 1.062394214 1.051999071 0.96770576 1.035511729 1.095600433 0.72328141)], + [qw(1.172939786 0.84567902 0.911836259 1.106288994 1.05351787 1.026143368 1.002308358 1.066319771 1.094918797 0.710733535)], + [qw(1.073527689 0.850290918 0.978455025 1.080882178 1.111174765 1.010754115 0.895668707 1.072980666 1.079304608 0.754057386)], + [qw(1.08807747 0.837444678 0.95824965 1.097310298 1.118897971 1.030863881 0.886827263 1.072349394 1.07406322 0.733440096)], + [qw(1.071685485 0.861055813 0.966566865 1.090268118 1.112945761 1.012538936 0.909535491 1.063745603 1.071156598 0.755770377)], + [qw(1.142698587 0.867936867 1.000612099 0.977934257 1.111801746 1.018318601 0.788556794 0.987763594 1.184649653 0.784776176)], + [qw(1.134560074 0.876651844 0.998190253 0.995723123 1.128448077 1.014172324 0.781776188 0.971020602 1.182411449 0.786449476)], + [qw(1.180029632 0.787899325 1.01316945 0.932268406 1.077837263 1.211699678 0.612128817 1.033036699 1.157314398 0.74940288)], + [qw(1.160925546 0.788308899 1.003702496 0.965371236 1.076051693 1.188304271 0.641536444 1.070331188 1.124067192 0.740126813)], + [qw(1.173873006 0.790118011 1.014718833 0.937979878 1.07453725 1.207167373 0.622279064 1.046150047 1.145627707 0.742212886)], + [qw(1.128383111 0.870541389 0.987269741 0.98353238 1.115643879 1.040107028 0.774505865 1.010896432 1.164757274 0.775254395)], + [qw(1.15297511 0.853883985 0.956393231 1.000027661 1.139915472 1.01355294 0.838843622 1.015553125 1.216219741 0.70447264)], + [qw(1.148264236 0.852123859 0.974568293 0.985455546 1.13192373 1.015879393 0.828987111 1.016820786 1.216647853 0.71634006)], + [qw(1.12933788 0.831777975 1.005434367 0.991081409 1.126146895 1.07421504 0.69343913 1.054032466 1.14809591 0.728541157)], + [qw(1.124157235 0.828112691 1.022348424 0.983822386 1.143028487 1.081830005 0.672594435 1.05685982 1.149537403 0.684432106)], + [qw(1.128029586 0.841853305 1.00983936 0.967179139 1.122524003 1.094555807 0.659238308 1.061578854 1.1243601 0.740148171)], + [qw(1.093521636 0.855071052 0.929160818 1.203773691 1.178257185 0.881341255 1.078305505 1.051988532 1.169143967 0.555057308)], + [qw(1.073737278 0.877396537 0.968017446 1.124155374 1.166244435 0.909044208 0.999147578 1.071098934 1.120156138 0.607444953)], + [qw(1.092150184 0.863407008 0.927040387 1.185387013 1.171670826 0.882276859 1.083058605 1.048379554 1.168635365 0.580337997)] + ]; +my $DATA_VIR = [ + [2,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [3,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [42,2,'Human (nasal)',[127/255, 127/255, 255/255,1]], + [43,2,'Human (nasal)',[127/255, 127/255, 255/255,1]], + [45,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [49,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [52,3,'Human (sputum)',[127/255, 127/255, 255/255,1]], + [54,3,'Human (sputum)',[127/255, 127/255, 255/255,1]], + [55,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]], + [57,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]], + [88,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]], + [89,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]], + [98,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]], + [99,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]], + [100,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]], + [102,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]], + [153,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]], + [154,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]], + [202,9,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [206,9,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [209,10,'Mosquito',[127/255, 127/255, 255/255,1]], + [211,10,'Mosquito',[127/255, 127/255, 255/255,1]], + ['U',0,'User input',[255/255, 127/255, 127/255,1]] + ]; +my $DATA_MIC = [ + [17,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [20,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [22,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [63,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [65,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [68,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [93,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [95,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [109,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [110,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [111,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [120,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [124,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]], + [125,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]], + [134,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [146,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [148,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [201,6,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [203,7,'Fish (slime)',[127/255, 127/255, 255/255,1]], + [205,6,'Fish (gut)',[127/255, 127/255, 255/255,1]], + ['U',0,'User input',[255/255, 127/255, 127/255,1]] + ]; +my $BASE64_BASES = {A => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC', + C => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC', + G => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=', + T => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==', + N => '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 +SUVORK5CYII=' + }; +my $MMCHART_B2 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC'; +my $FREQCHART_L = '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'; + +my $CSS_STYLE = ' +html, body, div, span, p, img { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +html, body { + font-family: Arial, Verdana; + color: #40454b; + font-size: 12px; + text-align: center; +} + +img { + padding: 0px; margin: 0px; border: none; +} + +.info-panel { + margin-top: 10px; + margin-bottom: 10px; + width: 740px; + text-align: left; +} + +.info-header { + padding-top: 20px; + padding-top: 10px; +} + +.info-header-title { + color: #126499; + text-decoration: none; + font-family: sans-serif; + font-weight: bold; + font-size: 16px; + vertical-align: baseline; + margin-right: 20px; + margin-bottom: 25px; + margin-top: 15px; +} + +.info-content { + padding: 2px; + font-family: "lucida grande",sans-serif,arial; + margin-top: 15px; + margin-bottom: 15px; +} + +.info-table-type { + min-width: 70px; + padding: 4px; + vertical-align: top; +} + +.info-table-value { + font-weight: bold; + padding-top: 4px; + padding-left: 10px; + padding-right: 10px; + vertical-align: top; +} + +hr { + background-color: #E0E0E0; + border: medium none; + color: #E0E0E0; + height: 1px; + outline: medium none; +} + +.sequencetext { + font-family: courier, "courier new"; + font-weight: normal; +} +'; + +my $VERSION = '0.6'; +my $WHAT = 'graphs-noPCA'; + +my $man = 0; +my $help = 0; +my %params = ('help' => \$help, 'h' => \$help, 'man' => \$man); +GetOptions( \%params, + 'help|h', + 'man', + 'verbose', + 'version' => sub { print "PRINSEQ-$WHAT $VERSION\n"; exit; }, + 'i=s', + 'o=s', + 'png_all', + 'html_all', + 'log:s', + 'web:s' + ) or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitstatus => 0, -verbose => 2) if $man; + +=head1 NAME + +PRINSEQ - PReprocessing and INformation of SEQuence data + +=head1 VERSION + +PRINSEQ-graphs 0.6 + +=head1 SYNOPSIS + +perl prinseq-graphs.pl [-h] [-help] [-version] [-man] [-verbose] [-i input_graph_data_file] [-png_all] [-html_all] [-log file] + +=head1 DESCRIPTION + +PRINSEQ will help you to preprocess your genomic or metagenomic sequence data in FASTA (and QUAL) or FASTQ format. The graphs version allows users of the lite version to generate graphs similar to the web version. + +=head1 OPTIONS + +=over 8 + +=item B<-help> | B<-h> + +Print the help message; ignore other arguments. + +=item B<-man> + +Print the full documentation; ignore other arguments. + +=item B<-version> + +Print program version; ignore other arguments. + +=item B<-verbose> + +Prints status and info messages during processing. + +=item B<***** INPUT OPTIONS *****> + +=item B<-i> <file> + +Input file containing the graph data generated by the lite version. + +=item B<***** OUTPUT OPTIONS *****> + +=item B<-o> <string> + +By default, the output files are created in the same directory as the input file with an additional "_prinseq_graphs_XXXX" in their name (where XXXX is replaced by random characters to prevent overwriting previous files). To change the output filename and location, specify the filename using this option. The file extension will be added automatically. + +=item B<-png_all> + +Use this option to generate PNG files with the graphs. + +=item B<-html_all> + +Use this option to generate a HTML file with the graphs and tables. + +=item B<-log> <file> + +Log file to keep track of parameters, errors, etc. The log file name is optional. If no file name is given, the log file name will be "inputname.log". If the log file already exists, new content will be added to the file. + +=back + +=head1 AUTHOR + +Robert SCHMIEDER, C<< <rschmieder_at_gmail_dot_com> >> + +=head1 BUGS + +If you find a bug please email me at C<< <rschmieder_at_gmail_dot_com> >> or use http://sourceforge.net/tracker/?group_id=315449 so that I can make PRINSEQ better. + +=head1 COPYRIGHT + +Copyright (C) 2011-2012 Robert SCHMIEDER + +=head1 LICENSE + +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/>. + +=cut + +# +################################################################################ +## DATA AND PARAMETER CHECKING +################################################################################ +# + +my ($file1,$command,@dataread); + +#Check if input file exists and check if file format is correct +if(exists $params{i}) { + $command .= ' -i '.$params{i}; + $file1 = $params{i}; + if($params{i} eq 'stdin') { + my $format = &checkInputFormat(); + unless($format eq 'gd') { + &printError('input data for -i is in '.uc($format).' format not in graph data format'); + } + } elsif(-e $params{i}) { + #check for file format + my $format = &checkFileFormat($file1); + unless($format eq 'gd') { + &printError('input file for -i is in '.uc($format).' format not in graph data format'); + } + } else { + &printError("could not find input file \"".$params{i}."\""); + } +} else { + &printError("you did not specify an input file containing the graph data"); +} + +#check output file name prefix +if(exists $params{o}) { + $command .= ' -o '.$params{o}; +} + +#check for output format +unless(exists $params{png_all} || exists $params{html_all}) { + &printError("No output format specified. Use -png_all and/or -html_all to generate graphs."); +} +if(exists $params{png_all}) { + $command .= ' -png_all'; +} +if(exists $params{html_all}) { + $command .= ' -html_all'; +} +if(exists $params{web}) { + $command .= ' -web'.($params{web} ? ' '.$params{web} : ''); +} + +#add remaining to log command +if(exists $params{log}) { + $command .= ' -log'.($params{log} ? ' '.$params{log} : ''); + + unless($params{log}) { + $params{log} = join("__",$file1||'nonamegiven').'.log'; + } + $params{log} = cwd().'/'.$params{log} unless($params{log} =~ /^\//); + &printLog("Executing PRINSEQ with command: \"perl prinseq-".$WHAT.".pl".$command."\""); +} + +# +################################################################################ +## DATA PROCESSING +################################################################################ +# + +my $filename = $file1; +while($filename =~ /[\w\d]+\.[\w\d]+$/) { + $filename =~ s/\.[\w\d]+$//; + last if($filename =~ /\/[^\.]+$/); +} + +if(exists $params{png_all}) { + my $graphs = &generateGraphs($params{i},$params{o}); + if(exists $params{web} && $params{web} ne 'nozip') { + #png files + if(scalar(@$graphs)) { + system("zip -j -r ".dirname($params{o})."/png_graphs.zip ".dirname($params{o}).' -i \*.png') == 0 or &printError("Cannot generate graphs ZIP file"); + } + } +} +if(exists $params{html_all}) { + &generateHtml($params{i},$params{o}); +} + +&printWeb("STATUS: done"); + +## +################################################################################# +### MISC FUNCTIONS +################################################################################# +## + +sub printError { + my $msg = shift; + print STDERR "\nERROR: ".$msg.".\n\nTry \'perl prinseq-".$WHAT.".pl -h\' for more information.\nExit program.\n"; + &printLog("ERROR: ".$msg.". Exit program.\n"); + exit(0); +} + +sub printWarning { + my $msg = shift; + print STDERR "WARNING: ".$msg.".\n"; + &printLog("WARNING: ".$msg.".\n"); +} + +sub printWeb { + my $msg = shift; + if(exists $params{web}) { + print STDERR "\n".&getTime()."$msg\n"; + } +} + +sub getTime { + return sprintf("[%02d/%02d/%04d %02d:%02d:%02d] ",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); +} + +sub printLog { + my $msg = shift; + if(exists $params{log}) { + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + open(FH, ">>", $params{log}) or die "ERROR: Can't open file ".$params{log}.": $! \n"; + flock(FH, LOCK_EX) or die "ERROR: Cannot lock file ".$params{log}.": $! \n"; + print FH "[prinseq-".$WHAT."-$VERSION] [$time] $msg\n"; + flock(FH, LOCK_UN) or die "ERROR: cannot unlock ".$params{log}.": $! \n"; + close(FH); + } +} + +sub addCommas { + my $num = shift; + return unless(defined $num); + return $num if($num < 1000); + $num = scalar reverse $num; + $num =~ s/(\d{3})/$1\,/g; + $num =~ s/\,$//; + $num = scalar reverse $num; + return $num; +} + +sub checkFileFormat { + my $file = shift; + + my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa); + $count = 3; + $fasta = $fastq = $qual = $gd = $aa = 0; + $format = 'unknown'; + + open(FILE,"perl -p -e 's/\r/\n/g;s/\n\n/\n/g' < $file |") or die "ERROR: Could not open file $file: $! \n"; + while (<FILE>) { +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/) { + $fastq = 3 if($id eq $1 || /^\+\s*$/); + } elsif(!$gd && /^\{\"numseqs\"\:/) { + $gd = 1; + } + } + close(FILE); + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } elsif($gd == 1) { + $format = 'gd'; + } + + return $format; +} + +sub checkInputFormat { + my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa); + $count = 3; + $fasta = $fastq = $qual = $gd = $aa = 0; + $format = 'unknown'; + + while (<STDIN>) { + push(@dataread,$_); +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/) { + $fastq = 3 if($id eq $1 || /^\+\s*$/); + } elsif(!$gd && /^\{\"numseqs\"\:/) { + $gd = 1; + } + } + + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } elsif($gd == 1) { + $format = 'gd'; + } + + return $format; +} + +sub readGdFile { + my $file = shift; + my $data; + + open(DATA,"<$file") or &printError("Could not open file $file: $!"); + while(<DATA>) { + next if(/^\#/); + chomp(); + if(length($_)) { + $data = from_json($_); + } + } + close(DATA); + + return $data; +} + +sub getFileName { + my $ext = shift; + my ($file,$fh); + if(exists $params{o}) { + $file = $params{o}.$ext; + open(OUT,">$file") or &printError('cannot open output file'); + close(OUT); + } else { + $fh = File::Temp->new( TEMPLATE => $filename.'_prinseq_graphs_XXXX', + SUFFIX => $ext, + UNLINK => 0); + $file = $fh->filename; + $fh->close(); + } + return $file; +} + +sub generateGraphs { + my ($in,$out) = @_; + my ($file,$data,$surface,@graphs); + $data = &readGdFile($in); + + #length plot + if(exists $data->{counts}->{length}) { + $file = &getFileName('_ld.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{length}) { + $file = &getFileName('_ld-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #tail plot + if(exists $data->{tail}) { + $file = &getFileName('_td5.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_td3.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{tail2}) { + $file = &getFileName('_td5-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_td3-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Ns plot + if(exists $data->{counts}->{ns}) { + $file = &getFileName('_ns.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{ns}) { + $file = &getFileName('_ns-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #GC content plot + if(exists $data->{counts}->{gc}) { + $file = &getFileName('_gc.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{gc}) { + $file = &getFileName('_gc-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence complexity plot - dust + if(exists $data->{compldust}) { + $file = &getFileName('_cd.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence complexity plot - entropy + if(exists $data->{complentropy}) { + $file = &getFileName('_ce.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Dinucleotide odd ratio PCA plot - microbial/viral + #Odds ratio plot + if(exists $data->{dinucodds}) { + my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}}; +# $file = &getFileName('_pm.png'); +# $surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file); +# $surface->write_to_png($file); +# push(@graphs,$file); +# $file = &getFileName('_pv.png'); +# $surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file); +# $surface->write_to_png($file); +# push(@graphs,$file); + $file = &getFileName('_or.png'); + $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qual plot + if(exists $data->{quals}) { + $file = &getFileName('_qd.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{quals2}) { + $file = &getFileName('_qd-2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qualbin plot + if(exists $data->{qualsbin}) { + $file = &getFileName('_qd2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval}); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{qualsbin2}) { + $file = &getFileName('_qd2-2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval}); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qualmean plot + if(exists $data->{qualsmean}) { + $file = &getFileName('_qd3.png'); + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{qualsmean2}) { + $file = &getFileName('_qd3-2.png'); + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence duplicate plots + if(exists $data->{dubscounts}) { + $file = &getFileName('_df.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{dubslength}) { + $file = &getFileName('_dl.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{dubscounts}) { + my %dubsmax; + my $count = 1; + foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) { + $dubsmax{$count++}->{$s} = $n; + last unless($count <= 100); + } + last unless($count <= 100); + } + last unless($count <= 100); + } + $file = &getFileName('_dm.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + return \@graphs; +} + +sub convertOdToBinMatrix { + my ($data,$min,$max,$nonice) = @_; + + my ($num,$ymax,$xmax,$xmin,$step,%vals,$tmp,@matrix,$bin,$tmpbin); + + #make nice xmax value + if(defined $max) { + $xmax = $max; + } else { + $xmax = (sort {$b <=> $a} keys %$data)[0]; + } + $bin = &getBinVal($xmax); + $xmax = $bin*100; + $xmin = (defined $min ? $min : 0); + + #get data to bin and find y axis max value + $ymax = 0; + $tmp = 0; + $tmpbin = $bin; + foreach my $i ($xmin..$xmax) { + if(exists $data->{$i}) { + $tmp += $data->{$i}; + } + if(--$tmpbin <= 0) { + $tmpbin = $bin; + $ymax = &max($ymax,$tmp); + push(@matrix,$tmp); + $tmp = 0; + } + } + + #make nice ymax value + unless($nonice) { + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); +# $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100)))); +# $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step); + } + + return (\@matrix,$xmax,$ymax); +} + +sub getBinVal { + my $val = shift; + my $step; + if(!$val || $val <= 100) { + return 1; + } elsif($val < 10000) { + return int($val/100)+($val % 100 ? 1 : 0); + } elsif($val < 100000) { + return 1000; + } else { + $step = 1000000; + my $xmax = ($val % $step ? sprintf("%d",($val/$step+1))*$step : $val); + return ($xmax/100); + } +} + +sub max { + my ($a,$b) = @_; + return ($a < $b ? $b : $a); +} + +sub min { + my ($a,$b) = @_; + return ($a > $b ? $b : $a); +} + +sub createAnnotBarPlot { + my ($matrix,$xmax,$ymax,$annot,$title,$xlab,$ylab,$file,$zero,$add) = @_; + + my $bin = 1; + if($xmax > 100) { + $bin = $xmax / 100; + $xmax = 100; + } + + my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff + my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2 + my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff + my @std1col = (0, 0, 0, 0.04); #ff7f7f + my @std2col = (0, 0, 0, 0.03); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @helplinecol = (1, 1, 1, 0.9); + my @background = (0.95, 0.95, 0.95, 1); + my @tickcol = (0, 0, 0, 0.8); + my @labelcol = (0, 0, 0, 1); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 40; + my $bottom = 15; + my $top = 20; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(@background); + $cr->fill; + + #draw ticks + #x-axis + $cr->set_source_rgba(@tickcol); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(@tickcol); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%10) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*$bin); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(@labelcol); + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : '')); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset+10); + $cr->show_text($ylab.($bin>1 ? ' (per bin)' : '')); + + $cr->restore; + + #draw annotations + if($annot) { + $cr->set_antialias('none'); + my ($std1l,$std2l,$std1r,$std2r); + #std boxes + $std1l = int($annot->{mean})-int($annot->{std}); + $std2l = int($annot->{mean})-2*int($annot->{std}); + $std1r = int($annot->{mean})+int($annot->{std}); + $std2r = int($annot->{mean})+2*int($annot->{std}); + unless($std1l == $std1r) { + if($std1l < 0) { + $std1l = 0; + } else { + $std1l = int($std1l/$bin); + } + if($std2l < 0) { + $std2l = 0; + } else { + $std2l = int($std2l/$bin); + } + if($std1r/$bin > 100) { + $std1r = 100; + } else { + $std1r = int($std1r/$bin); + } + if($std2r/$bin > 100) { + $std2r = 100; + } else { + $std2r = int($std2r/$bin); + } + $cr->rectangle($left+$offset+$std2l*$size+2, $top+$offset, ($std2r-$std2l)*$size, $height); + $cr->set_source_rgba(@std2col); + $cr->fill; + $cr->rectangle($left+$offset+$std1l*$size+2, $top+$offset, ($std1r-$std1l)*$size, $height); + $cr->set_source_rgba(@std1col); + $cr->fill; + #mean line + $cr->set_source_rgba(@meancol); + $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset+$height); + $cr->stroke; + #std lines + $cr->set_source_rgba(@stdcol); + if($std1l > 0) { + $cr->move_to($left+$offset+$std1l*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std1l*$size+2, $top+$offset+$height); + } + if($std2l > 0) { + $cr->move_to($left+$offset+$std2l*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std2l*$size+2, $top+$offset+$height); + } + if($std1r < 100) { + $cr->move_to($left+$offset+$std1r*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std1r*$size+2, $top+$offset+$height); + } + if($std2r < 100) { + $cr->move_to($left+$offset+$std2r*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std2r*$size+2, $top+$offset+$height); + } + $cr->stroke; + #labels + $cr->set_antialias('default'); + $cr->set_source_rgba(@tickcol); + $extents = $cr->text_extents('M'); + $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2-$extents->{width}/2, $top+$offset-10); + $cr->show_text('M'); + if($std1l > 0) { + $extents = $cr->text_extents('1SD'); + $cr->move_to($left+$offset+$std1l*$size-$extents->{width}/2+2, $top+$offset-10); + $cr->show_text('1SD'); + } + if($std2l > 0) { + $extents = $cr->text_extents('2SD'); + $cr->move_to($left+$offset+$std2l*$size-$extents->{width}/2+3, $top+$offset-10); + $cr->show_text('2SD'); + } + if($std1r < 100) { + $extents = $cr->text_extents('1SD'); + $cr->move_to($left+$offset+$std1r*$size-$extents->{width}/2+2, $top+$offset-10); + $cr->show_text('1SD'); + } + if($std2r < 100) { + $extents = $cr->text_extents('2SD'); + $cr->move_to($left+$offset+$std2r*$size-$extents->{width}/2+3, $top+$offset-10); + $cr->show_text('2SD'); + } + } + } + + #draw boxes + $cr->set_antialias('none'); + $cr->set_source_rgba(@barcol); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + next unless($matrix->[$pos]); + my $tmp = $matrix->[$pos] / $ymax; + #unique + if($tmp) { + $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height, $size-1, -$tmp*$height); + $cr->fill; + } + } + + #write image + $cr->show_page; + return $surface; +} + +#sub convertToPCAValues { +# my ($new,$type) = @_; +# +# my @data = ($type eq 'v' ? @$DINUCODDS_VIR : @$DINUCODDS_MIC); +# +# push(@data,$new); +# +# my $pca = Statistics::PCA->new; +# $pca->load_data({format => 'table', data => \@data}); +# $pca->pca(); +# +# my @variances = $pca->results('proportion'); +# my @list = $pca->results('transformed'); +# +# my ($xmin,$xmax,$ymin,$ymax); +# $xmax = $ymax = -100; +# $xmin = $ymin = 100; +# +# #get min/max values for PC1 +# foreach my $v (@{$list[0]}) { +# $xmax = &max($xmax,$v); +# $xmin = &min($xmin,$v); +# } +# #get min/max values for PC2 +# foreach my $v (@{$list[1]}) { +# $ymax = &max($ymax,$v); +# $ymin = &min($ymin,$v); +# } +# +# return ([$list[0],$list[1]],sprintf("%d",$variances[0]*100),sprintf("%d",$variances[1]*100),$xmin,$xmax,$ymin,$ymax,$type); +#} + +sub createPCAPlot { + my ($data,$var1,$var2,$xmin,$xmax,$ymin,$ymax,$type,$title,$xlab,$ylab,$file) = @_; + + my @linecol = (0, 0, 0, 0.4); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 5; + my $offset = 20; + my $left = 25; + my $bottom = 15; + my $top = ($type eq 'v' ? 35 : 20); + my $height = 500; + my $space = 10; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans-serif', 'normal', 'normal'); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, $height+2*$space, $height+2*$space); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #get infos + my $num = scalar(@{$data->[0]})-1; + my $xrange = ($xmax-$xmin); + my $yrange = ($ymax-$ymin); + my $data_info = ($type eq 'v' ? $DATA_VIR : $DATA_MIC); + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->move_to($left+$offset+$space, $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space, $top+$offset+$height+2*$space+3); + $cr->move_to($left+$offset+$space+$height, $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space+$height, $top+$offset+$height+2*$space+3); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space+3); + $cr->stroke; + #y-axis + $cr->move_to($left+$offset, $top+$offset+$space); + $cr->line_to($left+$offset-3, $top+$offset+$space); + $cr->move_to($left+$offset, $top+$offset+$height+$space); + $cr->line_to($left+$offset-3, $top+$offset+$height+$space); + $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->line_to($left+$offset-3, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset); + $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space); + $cr->stroke; + $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->line_to($left+$offset+2*$space+$height, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->stroke; + + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + $extents = $cr->text_extents(sprintf("%.2f",$xmin)); + $cr->move_to($left+$offset+$space-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(sprintf("%.2f",$xmin)); + $extents = $cr->text_extents(sprintf("%.2f",$xmax)); + $cr->move_to($left+$offset+$space+$height-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(sprintf("%.2f",$xmax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height)-$extents->{width}/2, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(0); + #y-axis + $extents = $cr->text_extents(sprintf("%.2f",$ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$ymax)); + $extents = $cr->text_extents(sprintf("%.2f",$ymin)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height+$space+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$ymin)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+int(abs($ymax)/$yrange*$height)+$fontheight/2-2); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #add type + $cr->set_source_rgba(0, 0, 0, 0.5); + $extents = $cr->text_extents(uc($type)); + $cr->arc($offset/2+$extents->{width}/2, $offset-5, 10, 0, 2*$PI); + $cr->fill; + $cr->set_source_rgba(1, 1, 1, 1); + $cr->move_to($offset/2-($type eq 'm' ? 1 : 0), $offset); + $cr->show_text(uc($type)); + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab.' ('.$var1.'%)'); + $cr->move_to($left+$offset+$height/2-$extents->{width}/2+$space, $top+$offset+$height+$fontheight+15+2*$space); + $cr->show_text($xlab.' ('.$var1.'%)'); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.' ('.$var2.'%)'); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2)+$space,$offset); + $cr->show_text($ylab.' ('.$var2.'%)'); + + $cr->restore; + + #draw dots + $cr->set_antialias('default'); + $cr->set_font_size (10); + foreach my $i (0..$num) { + $cr->set_source_rgba(@{$data_info->[$i]->[3]}); + $cr->arc(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height)), ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height)), $size, 0, 2*$PI); + $cr->fill; + } + $cr->set_source_rgba(0, 0, 0, 1); + foreach my $i (0..$num) { + $extents = $cr->text_extents($data_info->[$i]->[1]); + $cr->move_to(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height))+$size+1, ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height))+$size*2); + $cr->show_text($data_info->[$i]->[1]); + } + + #draw legend + my %labels; + foreach my $i (0..$num) { + $labels{$data_info->[$i]->[1]} = $data_info->[$i]->[2]; + } + $cr->set_font_size(10); + $fontheight = $font_extents->{height}; + $cr->set_source_rgba(0, 0, 0, 1); + my $x = $left+$offset+$space; + my $y = int($offset/2); + foreach my $n (sort {$a <=> $b} keys %labels) { + if($x+$cr->text_extents($n.' - '.$labels{$n})->{width}+15 >= $left+$offset+$space+$height) { + $x = $left+$offset+$space; + $y += $fontheight; + } + $cr->move_to($x,$y); + $cr->show_text($n.' - '.$labels{$n}); + $x += $cr->text_extents($n.' - '.$labels{$n})->{width}+15; + + } + + #write image + $cr->show_page; + return $surface; +} + +sub createOddsRatioPlot { + my ($data,$title,$xlab,$ylab,$file) = @_; + + my @yvalues = (0.5,0.78,1.00,1.23,1.5); + + my @linecol = (0, 0, 0, 0.4); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 40; + my $offset = 20; + my $left = 35; + my $right = 90; + my $bottom = 20; + my $top = 0; + my $height = 100; + my $width = $size*10; + my $space = 20; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, $width, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #right side marks + $cr->set_source_rgba(255/255, 127/255, 127/255, 0.6); + $cr->rectangle($left+$offset+$width+8, $top+$offset, 3, 0.77/2*$height); + $cr->fill; + $cr->rectangle($left+$offset+$width+8, $top+$offset+$height-0.78/2*$height, 3, 0.78/2*$height); + $cr->fill; + + #get infos + my $num = scalar(keys %$data)-1; + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + foreach my $i (0..$num) { + $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset+$height); + $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height+3); + } + $cr->stroke; + #y-axis + foreach my $i (@yvalues) { + $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height); + $cr->line_to($left+$offset-3, $top+$offset+$height-$i/2*$height); + } + $cr->stroke; + + #helplines + #x-axis + $cr->set_source_rgba(@helplinecol1); + foreach my $i (0..$num) { + $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset); + $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height); + } + $cr->stroke; + #yaxis + foreach my $i (@yvalues) { + $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.1 : 0.3)); + $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height); + $cr->line_to($left+$offset+$width, $top+$offset+$height-$i/2*$height); + $cr->stroke; + } + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + my $xcur = 0; + foreach my $dn (map {join("/",(m/../g ))} sort keys %$data) { + $extents = $cr->text_extents($dn); + $cr->move_to($left+$offset+$size/2-$extents->{width}/2-1+$size*$xcur++, $top+$offset+$height+$fontheight+2); + $cr->show_text($dn); + } + #y-axis + foreach my $i (@yvalues) { + $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.5 : 0.8)); + $extents = $cr->text_extents(sprintf("%.2f",$i)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height-$i/2*$height+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$i)); + } + + #label on right side + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents('Over-represented'); + $cr->move_to($left+$offset+$width+15, $top+$offset+$height-1.6/2*$height+$fontheight/2-2); + $cr->show_text('Over-represented'); + $extents = $cr->text_extents('Under-represented'); + $cr->move_to($left+$offset+$width+15, $top+$offset+$height-0.4/2*$height+$fontheight/2-2); + $cr->show_text('Under-represented'); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + #x-axis + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab); + $cr->move_to($left+$offset+$width/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab); + #y-axis + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw dots + $cr->set_antialias('default'); + $xcur = 0; + foreach my $dn (sort keys %$data) { + if($data->{$dn} > 1.23 || $data->{$dn} < 0.78) { + $cr->set_source_rgba(255/255, 127/255, 127/255, 1); + } else { + $cr->set_source_rgba(127/255, 127/255, 255/255, 1); + } + $cr->arc($left+$offset+$size/2+$size*$xcur++, $top+$offset+$height-$data->{$dn}/2*$height, 5, 0, 2*$PI); + $cr->fill; + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertToBoxValues { + my ($data,$niceval) = @_; + my ($xmax,$ymax,@matrix); + $xmax = $ymax = 0; + foreach my $i (sort {$a <=> $b} keys %$data) { + $xmax++; + push(@matrix,[$i,$data->{$i}->{min},$data->{$i}->{p25},$data->{$i}->{median},$data->{$i}->{p75},$data->{$i}->{max}]); + $ymax = &max($ymax,$data->{$i}->{max}); + } + + if($niceval) { + $ymax = sprintf("%d",($ymax/$niceval)+1)*$niceval if($ymax % $niceval); + } + + return (\@matrix,$xmax,$ymax); +} + +sub createBoxPlot { + my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero,$add,$bin) = @_; + $bin = ($bin ? $bin : 1); + $zero = 0 unless($zero); + $add = '' unless(defined $add); + if($xmax != 100) { + $xmax = 100; + } + $ymax = 1 unless($ymax); +# die Dumper $matrix; + + + my @col0 = (178/255, 178/255, 255/255); #b2b2ff + my @col1 = (255/255, 178/255, 178/255); #ffb2b2 + my @col3 = (127/255, 127/255, 255/255); #7f7fff + my @col4 = (255/255, 127/255, 127/255); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @linecol0 = (@col3, 1); + my @linecol1 = (@col4, 1); + my @boxcol = (@col3, 1); + my @whiscol = (@col0, 0.9); + my @medcol = (0,0,0, 0.5); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 25; + my $bottom = 25; + my $top = 5; + my $height = 300; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); +# $cr->set_font_size (30); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #draw legend + $cr->set_font_size(10); +# $font_extents = $cr->font_extents; + my $x = $left+$offset+$size*50; + foreach my $v ([\@whiscol,'Min/Max value'],[\@boxcol,'25th to 75th percentile'],[\@medcol,'Median']) { + $cr->set_antialias('none'); + $cr->set_source_rgba(@{$v->[0]}); + $cr->rectangle($x, $top+5, 10, 10); + $cr->fill; + $x += 15; + $cr->set_antialias('default'); + $cr->move_to($x,$top+5+9); + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->show_text($v->[1]); + $x += $cr->text_extents($v->[1])->{width}+15; + } + + $cr->set_antialias('none'); + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); +# $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height); +# $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+3); +# $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height+$space); +# $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+$space-3); + foreach my $i (1..9) { + $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); +# $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset); +# $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset-3); + } + $cr->stroke; + #y-axis + foreach my $j (0..4) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset-3, $top+$offset+$height*$j/4-($j ? 1 : 0)); +# $cr->move_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); +# $cr->line_to($left+$offset+($xmax+$zero)*$size+3, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis +# $extents = $cr->text_extents(1); +# $cr->move_to($left+$offset+int($size/2+1)-$extents->{width}, $top+$offset+$height+$fontheight+2); +# $cr->show_text(1); + foreach my $i (1..9) { + $extents = $cr->text_extents($i*10*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*10*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*10*$bin); + } + #y-axis + foreach my $j (0..4) { + $extents = $cr->text_extents(&addCommas($ymax*$j/4)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height*(4-$j)/4); + $cr->show_text(&addCommas($ymax*$j/4)); + } + + $cr->save; + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw boxes + my $factor = $height/$ymax; + $cr->set_antialias('none'); + foreach my $v (@$matrix) { + #wiskers + $cr->set_source_rgba(@whiscol); + if($v->[1] != $v->[2]) { + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[1]*$factor-1); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[1]*$factor-1); + $cr->stroke; + } + if($v->[4] != $v->[5]) { + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[5]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[5]*$factor); + $cr->stroke; + } + $cr->save; + $cr->set_dash(1,4,3); + if($v->[1] != $v->[2]) { + $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[2]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[1]*$factor); + $cr->stroke; + } + if($v->[4] != $v->[5]) { + $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[5]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[4]*$factor-1); + $cr->stroke; + } + $cr->restore; + #box + if(($v->[2] != $v->[3]) || ($v->[4] != $v->[3])) { + $cr->set_source_rgba(@whiscol); + $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-1, -($v->[4]-$v->[2])*$factor); + $cr->fill; + $cr->stroke; + $cr->set_source_rgba(@boxcol); + $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-2, -($v->[4]-$v->[2])*$factor); + $cr->stroke; + } else { + $cr->set_source_rgba(@boxcol); + $cr->move_to($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[3]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-1, $top+$offset+$height-$v->[3]*$factor); + $cr->stroke; + } + #median + $cr->set_source_rgba(@medcol); + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[3]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[3]*$factor); + $cr->stroke; + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertToBarValues { + my ($data,$niceval,$start,$max) = @_; + my ($xmax,$ymax,@matrix,$tmp); + $xmax = $ymax = 0; + + #get xmax value + if($max) { + $xmax = $max; + } else { + foreach my $q (keys %$data) { + $xmax = &max($xmax,$q); + } + } + if($niceval) { + $xmax = sprintf("%d",($xmax/$niceval)+1)*$niceval if($xmax % $niceval); + } + + #get matrix values + foreach my $q ($start..$xmax) { + $tmp = (exists $data->{$q} ? $data->{$q} : 0); + $ymax = &max($ymax,$tmp); + push(@matrix,$tmp); + } + + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); + + return (\@matrix,$xmax,$ymax); +} + +sub createBarPlot { + my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero) = @_; + + my @col0 = (178/255, 178/255, 255/255); #b2b2ff + my @col1 = (255/255, 178/255, 178/255); #ffb2b2 + my @col3 = (127/255, 127/255, 255/255); #7f7fff + my @col4 = (255/255, 127/255, 127/255); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @linecol0 = (@col3, 1); + my @linecol1 = (@col4, 1); + my @barcol0 = (@col3, 1); + my @barcol1 = (@col4, 1); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = ($xmax <= 50 ? 10 : ($xmax <= 100 ? 6 : 3)); + my $offset = 20; + my $left = 25; + my $bottom = 15; + my $top = 0; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); +# $cr->set_font_size (30); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw boxes + $cr->set_antialias('none'); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + next unless($matrix->[$pos+($zero ? 0 : 1)]); + my $tmp = $matrix->[$pos+($zero ? 0 : 1)] / $ymax; + #unique + if($tmp) { + $cr->set_source_rgba(@barcol0); + $cr->rectangle($left+$offset+($pos+($zero ? 0 : 1))*$size, $top+$offset+$height, $size-1, -$tmp*$height); + $cr->fill; + } + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertOdToStackBinMatrix { + my ($data,$stacks,$min,$max,$nonice) = @_; + + my ($num,$ymax,$xmax,$xmin,$step,%vals,%sums,$sum,@matrix,$bin,$tmpbin); + + #make nice xmax value + if(defined $max) { + $xmax = $max; + } else { + $xmax = (sort {$b <=> $a} keys %$data)[0]; + } + $bin = &getBinVal($xmax); + $xmax = $bin*100; + $xmin = (defined $min ? $min : 0); + + #get data to bin and find y axis max value + $ymax = 0; + foreach my $s (0..$stacks-1) { + $sums{$s} = 0; + } + $sum = 0; + $tmpbin = $bin; + foreach my $i ($xmin..$xmax) { + foreach my $s (0..$stacks-1) { + next unless(exists $data->{$i}->{$s}); + $sums{$s} += $data->{$i}->{$s}; + $sum += $data->{$i}->{$s}; + } + if(--$tmpbin <= 0) { + $tmpbin = $bin; + $ymax = &max($ymax,$sum); + $sum = 0; + foreach my $s (0..$stacks-1) { + push(@{$matrix[$s]},$sums{$s}); + $sums{$s} = 0; + } + } + } + + #make nice ymax value + unless($nonice) { + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); +# $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100)))); +# $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step); + } + + return (\@matrix,$xmax,$ymax,$stacks); +} + +sub createStackBarPlot { + my ($matrix,$xmax,$ymax,$stacks,$title,$xlab,$ylab,$file,$zero,$add) = @_; + + my $bin = 1; + if($xmax > 100) { + $bin = $xmax / 100; + $xmax = 100; + } + + my @legend = ('Exact dupl.','5\' dupl.','3\' dupl.','Rev. compl. exact dupl.','Rev. compl. 5\'/3\' dupl.'); + my @cols = ([69/255, 114/255, 167/255, 1], + [137/255, 1165/255, 78/255, 1], + [170/255, 70/255, 67/255, 1], + [147/255, 169/255, 207/255, 1], + [51/255, 102/255, 102/255, 1]); + my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff + my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2 + my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff + my @std1col = (0, 0, 0, 0.02); #ff7f7f + my @std2col = (0, 0, 0, 0.02); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @helplinecol = (1, 1, 1, 0.9); + my @background = (0.95, 0.95, 0.95, 1); + my @tickcol = (0, 0, 0, 0.8); + my @labelcol = (0, 0, 0, 1); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 40; + my $bottom = 15; + my $top = 20; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(@background); + $cr->fill; + + #draw legend + $cr->set_font_size(10); +# $font_extents = $cr->font_extents; + my $x = $left+$offset+$size*100-5; + foreach my $i (reverse (0..scalar(@legend)-1)) { + $cr->set_antialias('default'); + $x -= $cr->text_extents($legend[$i])->{width}; + $cr->move_to($x,$top+5+9); + $cr->set_source_rgba(@tickcol); + $cr->show_text($legend[$i]); + $x -= 15; + $cr->set_antialias('none'); + $cr->set_source_rgba(@{$cols[$i]}); + $cr->rectangle($x, $top+5, 10, 10); + $cr->fill; + $x -= 15; + } + + #draw ticks + $cr->set_antialias('none'); + #x-axis + $cr->set_source_rgba(@tickcol); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(@tickcol); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%10) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*$bin); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size(14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(@labelcol); + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : '')); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2+($bin>1 ? 12 : 0)),$offset+10); + $cr->show_text($ylab.($bin>1 ? ' (per bin)' : '')); + + $cr->restore; + + #draw boxes + $cr->set_antialias('none'); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + my $tmp = 0; + foreach my $s (0..$stacks-1) { + next unless($matrix->[$s]->[$pos]); + my $cur = $matrix->[$s]->[$pos] / $ymax; + $cr->set_source_rgba(@{$cols[$s]}); + if($cur) { + $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height-$tmp*$height, $size-1, -$cur*$height); + $cr->fill; + } + $tmp += $cur; + } + } + + #write image + $cr->show_page; + return $surface; +} + +sub header { + return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>PRINSEQ-'.$WHAT.' Report</title> +<style type="text/css"> +<!--/* <![CDATA[ */ +'.$CSS_STYLE.' +/* ]]> */--> +</style> +</head> +<body> +<center>'; +} + +sub footer { + return '</center></body></html>'; +} + +sub generateHtml { + my ($in,$out) = @_; + my ($file,$data,$surface,$html,$png); + $data = &readGdFile($in); + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + + $html .= &header(); + $html .= '<h2>PRINSEQ-'.$WHAT.' v'.$VERSION.' HTML Report </h2>[Generated: '.$time.']<br /><br />'; + $html .= '<div class="info-panel">'; + + #input info + if(exists $data->{numseqs}) { + $html .= '<div class="info-header"><span class="info-header-title">Input Information</span></div>'; + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Input file(s):</td><td class="info-table-value">'.($data->{filename1} ? &convertIntToString($data->{filename1}) : '-').($data->{filename2} ? ' and '.&convertIntToString($data->{filename2}) : '').'</td></tr><tr><td class="info-table-type">Input format(s):</td><td class="info-table-value">'.($data->{format1} ? uc($data->{format1}) : '-').($data->{format2} ? ' and '.uc($data->{format2}) : '').'</td></tr>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + my $singletons1 = ($data->{numseqs}||0)-($data->{pairs}||0); + my $singletons2 = ($data->{numseqs2}||0)-($data->{pairs}||0); + $html .= '<tr><td class="info-table-type"># Sequences (file 1):</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 1):</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr><tr><td class="info-table-type"># Sequences (file 2):</td><td class="info-table-value">'.&addCommas($data->{numseqs2}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 2):</td><td class="info-table-value">'.&addCommas($data->{numbases2}||'-').'</td></tr><tr><td class="info-table-type"># Pairs:</td><td class="info-table-value">'.&addCommas($data->{pairs}||'-').($data->{pairs} ? ' ('.sprintf("%.2f",(100*(2*$data->{pairs})/(($data->{numseqs}||0)+($data->{numseqs2}||0)))).'% of sequences)' : '').'</td></tr></tr><tr><td class="info-table-type"># Singletons (file 1):</td><td class="info-table-value">'.&addCommas($singletons1).($singletons1 ? ' ('.sprintf("%.2f",(100*$singletons1/$data->{numseqs})).'%)' : '').'</td></tr><tr><td class="info-table-type"># Singletons (file 2):</td><td class="info-table-value">'.&addCommas($singletons2).($singletons2 ? ' ('.sprintf("%.2f",(100*$singletons2/$data->{numseqs2})).'%)' : '').'</td></tr>'; + } else { + $html .= '<tr><td class="info-table-type"># Sequences:</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases:</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr>'; + } + $html .= '</tbody></table></div><hr>'; + } + + #length plot + if(exists $data->{counts}->{length} && keys %{$data->{counts}->{length}}) { + $html .= '<div class="info-header"><span class="info-header-title">Length Distribution</span></div>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' ± '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mean} ? sprintf("%.2f",$data->{stats2}->{length}->{mean}) : '-').' ± '.(exists $data->{stats2}->{length}->{std} ? sprintf("%.2f",$data->{stats2}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{min} ? &addCommas($data->{stats2}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{max} ? &addCommas($data->{stats2}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{range} ? &addCommas($data->{stats2}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mode} ? &addCommas($data->{stats2}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats2}->{length}->{modeval} ? &addCommas($data->{stats2}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } else { + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' ± '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } + $html .= '<hr>'; + } + + #GC content + if(exists $data->{counts}->{gc} && keys %{$data->{counts}->{gc}}) { + $html .= '<div class="info-header"><span class="info-header-title">GC Content Distribution</span></div>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mean} ? sprintf("%.2f",$data->{stats2}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats2}->{gc}->{std} ? sprintf("%.2f",$data->{stats2}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{min} ? $data->{stats2}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{max} ? $data->{stats2}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{range} ? $data->{stats2}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mode} ? $data->{stats2}->{gc}->{mode} : '-').' % with '.(exists $data->{stats2}->{gc}->{modeval} ? &addCommas($data->{stats2}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } else { + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } + $html .= '<hr>'; + } + + #Base quality + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '<div class="info-header"><span class="info-header-title">Base Quality Distribution</span></div><div class="info-content">'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + } + if(exists $data->{quals} && keys %{$data->{quals}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{qualsbin} && keys %{$data->{qualsbin}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval}); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{quals}); + $html .= &insert_image($png); + } + if(exists $data->{qualsmean} && keys %{$data->{qualsmean}}) { + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{qualsbin}); + $html .= &insert_image($png); + } + if(exists $data->{pairedend} && $data->{pairedend}) { + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + } + if(exists $data->{quals2} && keys %{$data->{quals2}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{qualsbin2} && keys %{$data->{qualsbin2}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval}); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{quals2}); + $html .= &insert_image($png); + } + if(exists $data->{qualsmean2} && keys %{$data->{qualsmean2}}) { + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{qualsbin2}); + $html .= &insert_image($png); + } + } + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '</div><hr>'; + } + + #Ns + if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) { + $html .= '<div class="info-header"><span class="info-header-title">Occurence of N</span></div><div class="info-content">'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + } + if(exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) { + my $nscount = 0; + foreach my $n (values %{$data->{counts}->{ns}}) { + $nscount += $n; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' ('.sprintf("%.2f",100/$data->{numseqs}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats}->{ns}->{max} ? $data->{stats}->{ns}->{max} : 0).' %</td></tr></tbody></table>'; + if($nscount) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + my $nscount = 0; + foreach my $n (values %{$data->{counts2}->{ns}}) { + $nscount += $n; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' ('.sprintf("%.2f",100/$data->{numseqs2}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats2}->{ns}->{max} ? $data->{stats2}->{ns}->{max} : 0).' %</td></tr></tbody></table>'; + if($nscount) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) { + $html .= '</div><hr>'; + } + + #tails + if(exists $data->{tail} || exists $data->{tail2}) { + $html .= '<div class="info-header"><span class="info-header-title">Poly-A/T Tails</span></div><div class="info-content">'; + } + if(exists $data->{tail}) { + my $tail5count = 0; + foreach my $n (values %{$data->{counts}->{tail5}}) { + $tail5count += $n; + } + my $tail3count = 0; + foreach my $n (values %{$data->{counts}->{tail3}}) { + $tail3count += $n; + } + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' ('.sprintf("%.2f",100/$data->{numseqs}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' ('.sprintf("%.2f",100/$data->{numseqs}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats}->{tail5}->{max} ? $data->{stats}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats}->{tail3}->{max} ? $data->{stats}->{tail3}->{max} : 0).'</td></tr></tbody></table>'; + if($tail5count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + if($tail3count) { + $html .= '<br />'; + } + } + if($tail3count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{tail2}) { + my $tail5count = 0; + foreach my $n (values %{$data->{counts2}->{tail5}}) { + $tail5count += $n; + } + my $tail3count = 0; + foreach my $n (values %{$data->{counts2}->{tail3}}) { + $tail3count += $n; + } + $html .= '<br /><br /><br /><b>File 2</b><br />'; + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' ('.sprintf("%.2f",100/$data->{numseqs2}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' ('.sprintf("%.2f",100/$data->{numseqs2}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail5}->{max} ? $data->{stats2}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail3}->{max} ? $data->{stats2}->{tail3}->{max} : 0).'</td></tr></tbody></table>'; + if($tail5count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + if($tail3count) { + $html .= '<br />'; + } + } + if($tail3count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{tail} || exists $data->{tail2}) { + $html .= '</div><hr>'; + } + + + #tag sequence check + if(exists $data->{freqs} || exists $data->{freqs2}) { + $html .= '<div class="info-header"><span class="info-header-title">Tag Sequence Check</span></div><div class="info-content">'; + } + if(exists $data->{freqs}) { + my $tagmidseq; + if(exists $data->{tagmidseq}) { + $tagmidseq = $data->{tagmidseq}; + $tagmidseq =~ s/\,/\<br \/\>/g; + } + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob}->{5} ? $data->{tagprob}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob}->{3} ? $data->{tagprob}->{3}.' %' : '-').'</td></tr><tr><td class="info-table-type">GSMIDs or RLMIDs:</td><td class="info-table-value">'.(exists $data->{tagmidnum} ? ($data->{tagmidnum} == 0 ? 'none' : ($tagmidseq ? $tagmidseq : $data->{tagmidnum})) : '-').'</td><td class="info-table-value"> </td></tr></tbody></table><br>'; + $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{5}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs}->{5}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{5}->{$pos}->{$base},14,1).'<br />'; + #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '<td align="center" valign="middle"> ... </td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{3}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs}->{3}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{3}->{$pos}->{$base},14,1).'<br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '</tr>'; + $html .= '<tr><td> </td>'; + foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) { + $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').' </td>'; + } + $html .= '</tr><tr><td align="left" valign="middle"> </td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>'; + $html .= '</table>'; + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{freqs2}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + $html .= '<table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob2}->{5} ? $data->{tagprob2}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob2}->{3} ? $data->{tagprob2}->{3}.' %' : '-').'</td></tr></tbody></table><br>'; + $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{5}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs2}->{5}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{5}->{$pos}->{$base},14,1).'<br />'; + #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '<td align="center" valign="middle"> ... </td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{3}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs2}->{3}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{3}->{$pos}->{$base},14,1).'<br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '</tr>'; + $html .= '<tr><td> </td>'; + foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) { + $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').' </td>'; + } + $html .= '</tr><tr><td align="left" valign="middle"> </td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>'; + $html .= '</table>'; + } + if(exists $data->{freqs} || exists $data->{freqs2}) { + $html .= '</div><hr>'; + } + + #Sequence duplicates + if(exists $data->{dubslength} || exists $data->{dubscounts}) { + $html .= '<div class="info-header"><span class="info-header-title">Sequence Duplication</span></div>'; + } + my %dubs; + if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) { + my $exactonly = $data->{exactonly}||0; + foreach my $n (keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + $dubs{$s}->{count} += $data->{dubscounts}->{$n}->{$s} * $n; + $dubs{$s}->{max} = $n unless(exists $dubs{$s}->{max} && $dubs{$s}->{max} > $n); + $dubs{all} += $data->{dubscounts}->{$n}->{$s} * $n; + } + } + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value"># Sequences</td> <td class="info-table-value">Max duplicates</td></tr><tr><td class="info-table-type">Exact duplicates:</td><td class="info-table-value">'.(exists $dubs{0}->{count} ? &addCommas($dubs{0}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{0}->{count}).' %)' : 0).'</td><td class="info-table-value">'.($dubs{0}->{max}||0).'</td></tr><tr><td class="info-table-type">Exact duplicates with reverse complements:</td><td class="info-table-value">'.(exists $dubs{3}->{count} ? &addCommas($dubs{3}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{3}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{3}->{max}||0).'</td></tr>'; + unless($exactonly) { + $html .= '<tr><td class="info-table-type">5\' duplicates</td><td class="info-table-value">'.(exists $dubs{1}->{count} ? &addCommas($dubs{1}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{1}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{1}->{max}||0).'</td></tr><tr><td class="info-table-type">3\' duplicates</td><td class="info-table-value">'.(exists $dubs{2}->{count} ? &addCommas($dubs{2}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{2}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{2}->{max}||0).'</td></tr><tr><td class="info-table-type">5\'/3\' duplicates with reverse complements</td><td class="info-table-value">'.(exists $dubs{4}->{count} ? &addCommas($dubs{4}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{4}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{4}->{max}||0).'</td></tr>'; + } + $html .= '<tr><td class="info-table-type">Total:</td><td class="info-table-value">'.(exists $dubs{all} ? &addCommas($dubs{all}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{all}).' %)' : 0).'</td><td class="info-table-value">-</td></tr></tbody></table>'; + } + if(exists $dubs{all} && $dubs{all}) { + if(exists $data->{dubslength} && keys %{$data->{dubslength}}) { + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) { + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{dubslength}); + $html .= &insert_image($png); + my %dubsmax; + my $count = 1; + foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) { + $dubsmax{$count++}->{$s} = $n; + last unless($count <= 100); + } + last unless($count <= 100); + } + last unless($count <= 100); + } + $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{dubslength}); + $html .= &insert_image($png); + } + } + if(exists $data->{dubslength} || exists $data->{dubscounts}) { + $html .= '</div><hr>'; + } + + #Sequence complexity + if(exists $data->{compldust} || exists $data->{complentropy}) { + $html .= '<div class="info-header"><span class="info-header-title">Sequence Complexity</span></div>'; + if(exists $data->{complvals}) { + my $complseq; + foreach my $d (keys %{$data->{complvals}}) { + foreach my $m ('minseq','maxseq') { + $complseq = $data->{complvals}->{$d}->{$m}; + $complseq = substr($complseq,0,797).'...' if(length($complseq) > 800); + $complseq =~ s/(.{60})/$1\<br \/\>/g; + $data->{complvals}->{$d}->{$m} = $complseq; + } + } + } + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">Value</td><td class="info-table-value">Sequence</td></tr><tr><td class="info-table-type">Minimum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{minval} ? $data->{complvals}->{dust}->{minval} : '-').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{minseq} ? $data->{complvals}->{dust}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{maxval} ? $data->{complvals}->{dust}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{maxseq} ? $data->{complvals}->{dust}->{maxseq} : '').'</td></tr><tr><td class="info-table-type">Minimum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{minval} ? $data->{complvals}->{entropy}->{minval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{minseq} ? $data->{complvals}->{entropy}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{maxval} ? $data->{complvals}->{entropy}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{maxseq} ? $data->{complvals}->{entropy}->{maxseq} : '').'</td></tr> </tbody></table><br />'; + } + if(exists $data->{compldust}) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{complentropy}) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{compldust}); + $html .= &insert_image($png); + } + if(exists $data->{compldust} || exists $data->{complentropy}) { + $html .= '</div><hr>'; + } + + #Dinucleotide odd ratio PCA - microbial/viral + if(exists $data->{dinucodds} && keys %{$data->{dinucodds}}) { + $html .= '<div class="info-header"><span class="info-header-title">Dinucleotide Odds Ratios</span></div>'; + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"> </td>'; + foreach my $d (map {join("/",(m/../g ))} sort keys %{$data->{dinucodds}}) { + $html .= '<td class="info-table-value">'.$d.'</td>'; + } + $html .= '</tr><tr><td class="info-table-type">Odds ratio</td>'; + foreach my $d (map {sprintf("%.4f",$data->{dinucodds}->{$_})} sort keys %{$data->{dinucodds}}) { + $html .= '<td class="info-table-value">'.$d.'</td>'; + } + $html .= '</tr></tbody></table><br />'; + my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}}; + $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + #$surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score',''); + #$png = ''; + #$surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + #$html .= '<br /><br />'; + #$html .= &insert_image($png); + #$surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score',''); + #$png = ''; + #$surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + #$html .= '<br /><br />'; + #$html .= &insert_image($png); + $html .= '</div>'; + } + + $html .= '</div>'; + $html .= &footer(); + + #write html to file + $file = &getFileName('.html'); + open(FH, ">$file") or &printError("Can't open file ".$file.": $!"); + print FH $html; + close(FH); + &printLog("Done with HTML data"); +} + +sub insert_image { + my ($data, $height, $width, $noencode) = @_; + my $content .= '<img border="0" '.($height ? 'height="'.$height.'"' : '').($width ? 'width="'.$width.'"' : '').' src="'.($noencode ? "data:image/png;base64,".$data : &inline_image($data)).'" />'."\n"; + return $content; +} + +sub inline_image { + return "data:image/png;base64,".MIME::Base64::encode_base64($_[0]); +} + +sub convertIntToString { + my $int = shift; + $int =~ s/(.{2})/chr(hex($1))/eg; + return $int; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prinseq-graphs.pl Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,2665 @@ +#!/usr/bin/perl + +#=============================================================================== +# Author: Robert SCHMIEDER, Computational Science Research Center @ SDSU, CA +# +# File: prinseq-graphs +# Date: 2012-12-22 +# Version: 0.6 graphs +# +# Usage: +# prinseq-graphs [options] +# +# Try 'prinseq-graphs -h' for more information. +# +# Purpose: PRINSEQ will help you to preprocess your genomic or metagenomic +# sequence data in FASTA or FASTQ format. The graphs version allows +# users of the lite version to generate graphs similar to the web +# version. +# +# Bugs: Please use http://sourceforge.net/tracker/?group_id=315449 +# +#=============================================================================== + +use strict; +use warnings; + +use Getopt::Long; +use Pod::Usage; +use File::Temp qw(tempfile); #for output files +use Fcntl qw(:flock SEEK_END); #for log file +use Cwd; +use JSON; +use Cairo; +use Statistics::PCA; +use MIME::Base64; +use File::Basename; +use Data::Dumper; ### + +$| = 1; # Do not buffer output + +my $PI = 4 * atan2(1, 1); +my $LOG62 = log(62); +my $DINUCODDS_VIR = [ + [qw(1.086940308 0.98976932 1.034167044 0.880024041 1.070421277 0.990687084 0.890945575 1.069957074 0.92465631 0.803973303)], + [qw(1.101064857 0.986812783 1.038299155 0.896162618 1.081652847 0.976365237 0.867445186 1.06727283 0.94688543 0.768007295)], + [qw(1.071548411 0.912204166 1.196914981 0.80628184 1.294201511 1.148517794 0.269295791 1.033948026 0.895951033 0.623192149)], + [qw(1.090253719 0.907428629 1.203991784 0.786359294 1.281499107 1.145421568 0.235974709 1.033437274 0.899580091 0.631699771)], + [qw(1.075864745 1.003413074 1.01872902 0.897841689 0.980373171 1.05854979 0.934262259 1.052477953 0.88145851 0.889239724)], + [qw(1.101890467 1.030028291 1.019912674 0.84191395 1.0015174 1.069546264 0.900151602 0.996269395 0.889195343 0.904039022)], + [qw(1.152417359 0.855028574 0.91164793 1.017415486 1.114163672 1.128353311 0.846355573 0.916745489 1.206820475 0.811014651)], + [qw(1.142454218 0.8635465 0.923406967 1.026242747 1.134445058 1.131747833 0.79793368 0.920767641 1.179468556 0.799770057)], + [qw(1.124462747 0.873556143 0.945627041 1.013755408 1.159866153 1.096259526 0.757315047 0.972924919 1.105562567 0.772731886)], + [qw(1.143826972 0.866968779 0.995740249 0.945859278 1.109590621 1.089305083 0.76048874 0.971561388 1.157101408 0.792923027)], + [qw(1.131900141 0.82776996 0.996204924 0.999433455 1.024692372 1.071176333 0.921026216 1.088936699 1.054010776 0.773498892)], + [qw(1.042180476 0.930180412 1.019242897 0.98909997 1.006666828 1.046708539 0.959492164 1.011183418 1.055168776 0.937433818)], + [qw(1.086515695 0.985345815 0.930914307 0.969581792 1.043010232 1.087463712 0.939482285 0.990551965 0.954752469 0.893972874)], + [qw(1.096657826 0.950117614 0.936195529 0.965619788 1.114975275 1.077011195 0.843153131 0.989128406 1.043790912 0.840634731)], + [qw(1.158030995 0.935307365 0.874812261 1.056236525 1.117171274 0.937484692 1.057442372 0.970079538 1.174848738 0.725071711)], + [qw(1.15591506 0.93000227 0.883538923 1.0567652 1.095730954 0.944489906 1.074229471 0.983993745 1.156051409 0.726688465)], + [qw(1.205726473 0.924439339 1.049457756 0.805718412 0.975472778 1.07581991 0.726992211 1.075025787 0.8704929 0.726672843)], + [qw(1.188544681 0.95239611 1.049066985 0.790031334 1.038632598 1.056749787 0.665197397 1.057566244 0.862429061 0.708982398)], + [qw(1.063631482 0.925593715 1.014869316 0.944904401 1.119690731 1.325971834 0.273781451 0.943347677 1.06438014 0.920825904)], + [qw(1.077560287 0.911888545 1.044147857 0.927758054 1.058535939 1.296838544 0.421514996 0.945722451 1.128317986 0.926419928)], + [qw(1.163753415 0.989905668 0.893599328 0.955641844 1.176047687 0.941559156 0.950641089 0.959741692 1.100815282 0.72491925)], + [qw(1.139253929 0.946297517 0.922096125 1.024801537 1.205206793 0.968818717 0.915801342 0.971626058 1.107569276 0.627623404)] + ]; +my $DINUCODDS_MIC = [ + [qw(1.13127323 0.853587195 0.911041047 1.104520778 1.065586428 1.021434164 0.999734139 1.063684014 1.078035184 0.733596552)], + [qw(1.173267344 0.840539337 0.919534602 1.068050141 1.062394214 1.051999071 0.96770576 1.035511729 1.095600433 0.72328141)], + [qw(1.172939786 0.84567902 0.911836259 1.106288994 1.05351787 1.026143368 1.002308358 1.066319771 1.094918797 0.710733535)], + [qw(1.073527689 0.850290918 0.978455025 1.080882178 1.111174765 1.010754115 0.895668707 1.072980666 1.079304608 0.754057386)], + [qw(1.08807747 0.837444678 0.95824965 1.097310298 1.118897971 1.030863881 0.886827263 1.072349394 1.07406322 0.733440096)], + [qw(1.071685485 0.861055813 0.966566865 1.090268118 1.112945761 1.012538936 0.909535491 1.063745603 1.071156598 0.755770377)], + [qw(1.142698587 0.867936867 1.000612099 0.977934257 1.111801746 1.018318601 0.788556794 0.987763594 1.184649653 0.784776176)], + [qw(1.134560074 0.876651844 0.998190253 0.995723123 1.128448077 1.014172324 0.781776188 0.971020602 1.182411449 0.786449476)], + [qw(1.180029632 0.787899325 1.01316945 0.932268406 1.077837263 1.211699678 0.612128817 1.033036699 1.157314398 0.74940288)], + [qw(1.160925546 0.788308899 1.003702496 0.965371236 1.076051693 1.188304271 0.641536444 1.070331188 1.124067192 0.740126813)], + [qw(1.173873006 0.790118011 1.014718833 0.937979878 1.07453725 1.207167373 0.622279064 1.046150047 1.145627707 0.742212886)], + [qw(1.128383111 0.870541389 0.987269741 0.98353238 1.115643879 1.040107028 0.774505865 1.010896432 1.164757274 0.775254395)], + [qw(1.15297511 0.853883985 0.956393231 1.000027661 1.139915472 1.01355294 0.838843622 1.015553125 1.216219741 0.70447264)], + [qw(1.148264236 0.852123859 0.974568293 0.985455546 1.13192373 1.015879393 0.828987111 1.016820786 1.216647853 0.71634006)], + [qw(1.12933788 0.831777975 1.005434367 0.991081409 1.126146895 1.07421504 0.69343913 1.054032466 1.14809591 0.728541157)], + [qw(1.124157235 0.828112691 1.022348424 0.983822386 1.143028487 1.081830005 0.672594435 1.05685982 1.149537403 0.684432106)], + [qw(1.128029586 0.841853305 1.00983936 0.967179139 1.122524003 1.094555807 0.659238308 1.061578854 1.1243601 0.740148171)], + [qw(1.093521636 0.855071052 0.929160818 1.203773691 1.178257185 0.881341255 1.078305505 1.051988532 1.169143967 0.555057308)], + [qw(1.073737278 0.877396537 0.968017446 1.124155374 1.166244435 0.909044208 0.999147578 1.071098934 1.120156138 0.607444953)], + [qw(1.092150184 0.863407008 0.927040387 1.185387013 1.171670826 0.882276859 1.083058605 1.048379554 1.168635365 0.580337997)] + ]; +my $DATA_VIR = [ + [2,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [3,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [42,2,'Human (nasal)',[127/255, 127/255, 255/255,1]], + [43,2,'Human (nasal)',[127/255, 127/255, 255/255,1]], + [45,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [49,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [52,3,'Human (sputum)',[127/255, 127/255, 255/255,1]], + [54,3,'Human (sputum)',[127/255, 127/255, 255/255,1]], + [55,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]], + [57,4,'Human (sputum, CF)',[127/255, 127/255, 255/255,1]], + [88,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]], + [89,5,'Freshwater (Hot spring)',[127/255, 127/255, 255/255,1]], + [98,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]], + [99,6,'Freshwater (Antartic lake)',[127/255, 127/255, 255/255,1]], + [100,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]], + [102,7,'Freshwater (reclaimed)',[127/255, 127/255, 255/255,1]], + [153,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]], + [154,8,'Mouse (brain tissue)',[127/255, 127/255, 255/255,1]], + [202,9,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [206,9,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [209,10,'Mosquito',[127/255, 127/255, 255/255,1]], + [211,10,'Mosquito',[127/255, 127/255, 255/255,1]], + ['U',0,'User input',[255/255, 127/255, 127/255,1]] + ]; +my $DATA_MIC = [ + [17,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [20,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [22,1,'Human (fecal)',[127/255, 127/255, 255/255,1]], + [63,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [65,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [68,2,'Mouse (fecal)',[127/255, 127/255, 255/255,1]], + [93,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [95,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [109,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [110,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [111,4,'Marine (open ocean)',[127/255, 127/255, 255/255,1]], + [120,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [124,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]], + [125,5,'Marine (estuary)',[127/255, 127/255, 255/255,1]], + [134,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [146,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [148,3,'Marine (coastal)',[127/255, 127/255, 255/255,1]], + [201,6,'Fish (gut)',[127/255, 127/255, 255/255,1]], + [203,7,'Fish (slime)',[127/255, 127/255, 255/255,1]], + [205,6,'Fish (gut)',[127/255, 127/255, 255/255,1]], + ['U',0,'User input',[255/255, 127/255, 127/255,1]] + ]; +my $BASE64_BASES = {A => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC', + C => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC', + G => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=', + T => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==', + N => 'iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK +T2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AU +kSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXX +Pues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgAB +eNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAt +AGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3 +AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dX +Lh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+ +5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk +5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd +0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA +4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzA +BhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/ph +CJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5 +h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+ +Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM +WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQ +AkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+Io +UspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdp +r+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZ +D5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61Mb +U2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY +/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllir +SKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79u +p+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6Vh +lWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1 +mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lO +k06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7Ry +FDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3I +veRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+B +Z7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/ +0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p +DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5q +PNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIs +OpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5 +hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQ +rAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9 +rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1d +T1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aX +Dm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7 +vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3S +PVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKa +RptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO +32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21 +e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfV +P1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i +/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8 +IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq +YAAAOpgAABdvkl/FRgAAAh1JREFUeNrsmk1xwzAQRr8RgYRBwqBhkDJoGbQMagZ1GbgMVAYNA5dB +wsBm4CBwL9Wx0Uwk7593Z3z0SHmRn3fXi3me8d8FoAUw33kdQB/9PXu9xWCeZ4QFN9zBSCwJ6Qig +cUj5aAFsHdLt2Fh47ALBGi8AHh2ScYlTQXrQLPFAuJZaiVNC2gCIDikfTxolHhjWjA4pH7s/Pzmk +TDQA9g7JUCYeGNdWI/HAvH50SEYkHgTs4V26xIOQfUSHlI8jgGeHlI9OagEsCdIOQtspQdh+REo8 +CPzjokNSKPGlIJ0qnKatdUgdgJ/CArhdw+NW+qZ6A888ASmkM4DPCifSvLhbANdCib9ahzRV+JHs +mThFCvCtXeJUeVLpaWKVOBWkAcCH1kycMuPuAIwF97PNE1BCqiHxlkPi1LVbX1iysHyK4ihwm8Lc +iXwojAPSUOE0dNYhJbdctEics5/UVAC9tQ6pB/BVKPFoHVINiZPME3BDmirUZdE6pPSmKimAF58n +kPIhoKlw/946pDPKupiLZuKSPim1FSR+sA6pRgG8sQ4JKO9iYg2QAAGNfw2QBpR3Mc1DSrnT6JCW +l7h5SKkAPjmk5QvgVUAaIGAeQDqklImPDkl47qQFUo+yLuYqILFKXBOkCUzTJZogpUz84pAESlwj +pDPKZzHNQ0q509Uh5SXeOKR8RBB1MTVDIpO4dkgDCLqY2iGl3Gl0SMwS/x0AsYSfWCRqIfIAAAAA +SUVORK5CYII=' + }; +my $MMCHART_B2 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC'; +my $FREQCHART_L = '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'; + +my $CSS_STYLE = ' +html, body, div, span, p, img { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +html, body { + font-family: Arial, Verdana; + color: #40454b; + font-size: 12px; + text-align: center; +} + +img { + padding: 0px; margin: 0px; border: none; +} + +.info-panel { + margin-top: 10px; + margin-bottom: 10px; + width: 740px; + text-align: left; +} + +.info-header { + padding-top: 20px; + padding-top: 10px; +} + +.info-header-title { + color: #126499; + text-decoration: none; + font-family: sans-serif; + font-weight: bold; + font-size: 16px; + vertical-align: baseline; + margin-right: 20px; + margin-bottom: 25px; + margin-top: 15px; +} + +.info-content { + padding: 2px; + font-family: "lucida grande",sans-serif,arial; + margin-top: 15px; + margin-bottom: 15px; +} + +.info-table-type { + min-width: 70px; + padding: 4px; + vertical-align: top; +} + +.info-table-value { + font-weight: bold; + padding-top: 4px; + padding-left: 10px; + padding-right: 10px; + vertical-align: top; +} + +hr { + background-color: #E0E0E0; + border: medium none; + color: #E0E0E0; + height: 1px; + outline: medium none; +} + +.sequencetext { + font-family: courier, "courier new"; + font-weight: normal; +} +'; + +my $VERSION = '0.6'; +my $WHAT = 'graphs'; + +my $man = 0; +my $help = 0; +my %params = ('help' => \$help, 'h' => \$help, 'man' => \$man); +GetOptions( \%params, + 'help|h', + 'man', + 'verbose', + 'version' => sub { print "PRINSEQ-$WHAT $VERSION\n"; exit; }, + 'i=s', + 'o=s', + 'png_all', + 'html_all', + 'log:s', + 'web:s' + ) or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitstatus => 0, -verbose => 2) if $man; + +=head1 NAME + +PRINSEQ - PReprocessing and INformation of SEQuence data + +=head1 VERSION + +PRINSEQ-graphs 0.6 + +=head1 SYNOPSIS + +perl prinseq-graphs.pl [-h] [-help] [-version] [-man] [-verbose] [-i input_graph_data_file] [-png_all] [-html_all] [-log file] + +=head1 DESCRIPTION + +PRINSEQ will help you to preprocess your genomic or metagenomic sequence data in FASTA (and QUAL) or FASTQ format. The graphs version allows users of the lite version to generate graphs similar to the web version. + +=head1 OPTIONS + +=over 8 + +=item B<-help> | B<-h> + +Print the help message; ignore other arguments. + +=item B<-man> + +Print the full documentation; ignore other arguments. + +=item B<-version> + +Print program version; ignore other arguments. + +=item B<-verbose> + +Prints status and info messages during processing. + +=item B<***** INPUT OPTIONS *****> + +=item B<-i> <file> + +Input file containing the graph data generated by the lite version. + +=item B<***** OUTPUT OPTIONS *****> + +=item B<-o> <string> + +By default, the output files are created in the same directory as the input file with an additional "_prinseq_graphs_XXXX" in their name (where XXXX is replaced by random characters to prevent overwriting previous files). To change the output filename and location, specify the filename using this option. The file extension will be added automatically. + +=item B<-png_all> + +Use this option to generate PNG files with the graphs. + +=item B<-html_all> + +Use this option to generate a HTML file with the graphs and tables. + +=item B<-log> <file> + +Log file to keep track of parameters, errors, etc. The log file name is optional. If no file name is given, the log file name will be "inputname.log". If the log file already exists, new content will be added to the file. + +=back + +=head1 AUTHOR + +Robert SCHMIEDER, C<< <rschmieder_at_gmail_dot_com> >> + +=head1 BUGS + +If you find a bug please email me at C<< <rschmieder_at_gmail_dot_com> >> or use http://sourceforge.net/tracker/?group_id=315449 so that I can make PRINSEQ better. + +=head1 COPYRIGHT + +Copyright (C) 2011-2012 Robert SCHMIEDER + +=head1 LICENSE + +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/>. + +=cut + +# +################################################################################ +## DATA AND PARAMETER CHECKING +################################################################################ +# + +my ($file1,$command,@dataread); + +#Check if input file exists and check if file format is correct +if(exists $params{i}) { + $command .= ' -i '.$params{i}; + $file1 = $params{i}; + if($params{i} eq 'stdin') { + my $format = &checkInputFormat(); + unless($format eq 'gd') { + &printError('input data for -i is in '.uc($format).' format not in graph data format'); + } + } elsif(-e $params{i}) { + #check for file format + my $format = &checkFileFormat($file1); + unless($format eq 'gd') { + &printError('input file for -i is in '.uc($format).' format not in graph data format'); + } + } else { + &printError("could not find input file \"".$params{i}."\""); + } +} else { + &printError("you did not specify an input file containing the graph data"); +} + +#check output file name prefix +if(exists $params{o}) { + $command .= ' -o '.$params{o}; +} + +#check for output format +unless(exists $params{png_all} || exists $params{html_all}) { + &printError("No output format specified. Use -png_all and/or -html_all to generate graphs."); +} +if(exists $params{png_all}) { + $command .= ' -png_all'; +} +if(exists $params{html_all}) { + $command .= ' -html_all'; +} +if(exists $params{web}) { + $command .= ' -web'.($params{web} ? ' '.$params{web} : ''); +} + +#add remaining to log command +if(exists $params{log}) { + $command .= ' -log'.($params{log} ? ' '.$params{log} : ''); + + unless($params{log}) { + $params{log} = join("__",$file1||'nonamegiven').'.log'; + } + $params{log} = cwd().'/'.$params{log} unless($params{log} =~ /^\//); + &printLog("Executing PRINSEQ with command: \"perl prinseq-".$WHAT.".pl".$command."\""); +} + +# +################################################################################ +## DATA PROCESSING +################################################################################ +# + +my $filename = $file1; +while($filename =~ /[\w\d]+\.[\w\d]+$/) { + $filename =~ s/\.[\w\d]+$//; + last if($filename =~ /\/[^\.]+$/); +} + +if(exists $params{png_all}) { + my $graphs = &generateGraphs($params{i},$params{o}); + if(exists $params{web} && $params{web} ne 'nozip') { + #png files + if(scalar(@$graphs)) { + system("zip -j -r ".dirname($params{o})."/png_graphs.zip ".dirname($params{o}).' -i \*.png') == 0 or &printError("Cannot generate graphs ZIP file"); + } + } +} +if(exists $params{html_all}) { + &generateHtml($params{i},$params{o}); +} + +&printWeb("STATUS: done"); + +## +################################################################################# +### MISC FUNCTIONS +################################################################################# +## + +sub printError { + my $msg = shift; + print STDERR "\nERROR: ".$msg.".\n\nTry \'perl prinseq-".$WHAT.".pl -h\' for more information.\nExit program.\n"; + &printLog("ERROR: ".$msg.". Exit program.\n"); + exit(0); +} + +sub printWarning { + my $msg = shift; + print STDERR "WARNING: ".$msg.".\n"; + &printLog("WARNING: ".$msg.".\n"); +} + +sub printWeb { + my $msg = shift; + if(exists $params{web}) { + print STDERR "\n".&getTime()."$msg\n"; + } +} + +sub getTime { + return sprintf("[%02d/%02d/%04d %02d:%02d:%02d] ",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); +} + +sub printLog { + my $msg = shift; + if(exists $params{log}) { + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + open(FH, ">>", $params{log}) or die "ERROR: Can't open file ".$params{log}.": $! \n"; + flock(FH, LOCK_EX) or die "ERROR: Cannot lock file ".$params{log}.": $! \n"; + print FH "[prinseq-".$WHAT."-$VERSION] [$time] $msg\n"; + flock(FH, LOCK_UN) or die "ERROR: cannot unlock ".$params{log}.": $! \n"; + close(FH); + } +} + +sub addCommas { + my $num = shift; + return unless(defined $num); + return $num if($num < 1000); + $num = scalar reverse $num; + $num =~ s/(\d{3})/$1\,/g; + $num =~ s/\,$//; + $num = scalar reverse $num; + return $num; +} + +sub checkFileFormat { + my $file = shift; + + my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa); + $count = 3; + $fasta = $fastq = $qual = $gd = $aa = 0; + $format = 'unknown'; + + open(FILE,"perl -p -e 's/\r/\n/g;s/\n\n/\n/g' < $file |") or die "ERROR: Could not open file $file: $! \n"; + while (<FILE>) { +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/) { + $fastq = 3 if($id eq $1 || /^\+\s*$/); + } elsif(!$gd && /^\{\"numseqs\"\:/) { + $gd = 1; + } + } + close(FILE); + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } elsif($gd == 1) { + $format = 'gd'; + } + + return $format; +} + +sub checkInputFormat { + my ($format,$count,$id,$fasta,$fastq,$qual,$gd,$aa); + $count = 3; + $fasta = $fastq = $qual = $gd = $aa = 0; + $format = 'unknown'; + + while (<STDIN>) { + push(@dataread,$_); +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/) { + $fastq = 3 if($id eq $1 || /^\+\s*$/); + } elsif(!$gd && /^\{\"numseqs\"\:/) { + $gd = 1; + } + } + + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } elsif($gd == 1) { + $format = 'gd'; + } + + return $format; +} + +sub readGdFile { + my $file = shift; + my $data; + + open(DATA,"<$file") or &printError("Could not open file $file: $!"); + while(<DATA>) { + next if(/^\#/); + chomp(); + if(length($_)) { + $data = from_json($_); + } + } + close(DATA); + + return $data; +} + +sub getFileName { + my $ext = shift; + my ($file,$fh); + if(exists $params{o}) { + $file = $params{o}.$ext; + open(OUT,">$file") or &printError('cannot open output file'); + close(OUT); + } else { + $fh = File::Temp->new( TEMPLATE => $filename.'_prinseq_graphs_XXXX', + SUFFIX => $ext, + UNLINK => 0); + $file = $fh->filename; + $fh->close(); + } + return $file; +} + +sub generateGraphs { + my ($in,$out) = @_; + my ($file,$data,$surface,@graphs); + $data = &readGdFile($in); + + #length plot + if(exists $data->{counts}->{length}) { + $file = &getFileName('_ld.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{length}) { + $file = &getFileName('_ld-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #tail plot + if(exists $data->{tail}) { + $file = &getFileName('_td5.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_td3.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{tail2}) { + $file = &getFileName('_td5-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_td3-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Ns plot + if(exists $data->{counts}->{ns}) { + $file = &getFileName('_ns.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{ns}) { + $file = &getFileName('_ns-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #GC content plot + if(exists $data->{counts}->{gc}) { + $file = &getFileName('_gc.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{counts2} && exists $data->{counts2}->{gc}) { + $file = &getFileName('_gc-2.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence complexity plot - dust + if(exists $data->{compldust}) { + $file = &getFileName('_cd.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence complexity plot - entropy + if(exists $data->{complentropy}) { + $file = &getFileName('_ce.png'); + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences',$file,1); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Dinucleotide odd ratio PCA plot - microbial/viral + #Odds ratio plot + if(exists $data->{dinucodds}) { + my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}}; + $file = &getFileName('_pm.png'); + $surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_pv.png'); + $surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + $file = &getFileName('_or.png'); + $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qual plot + if(exists $data->{quals}) { + $file = &getFileName('_qd.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{quals2}) { + $file = &getFileName('_qd-2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score',$file); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qualbin plot + if(exists $data->{qualsbin}) { + $file = &getFileName('_qd2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval}); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{qualsbin2}) { + $file = &getFileName('_qd2-2.png'); + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score',$file,0,'bp',$data->{binval}); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Qualmean plot + if(exists $data->{qualsmean}) { + $file = &getFileName('_qd3.png'); + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{qualsmean2}) { + $file = &getFileName('_qd3-2.png'); + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + #Sequence duplicate plots + if(exists $data->{dubscounts}) { + $file = &getFileName('_df.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{dubslength}) { + $file = &getFileName('_dl.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates',$file,0,' bp'); + $surface->write_to_png($file); + push(@graphs,$file); + } + if(exists $data->{dubscounts}) { + my %dubsmax; + my $count = 1; + foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) { + $dubsmax{$count++}->{$s} = $n; + last unless($count <= 100); + } + last unless($count <= 100); + } + last unless($count <= 100); + } + $file = &getFileName('_dm.png'); + $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates',$file,0); + $surface->write_to_png($file); + push(@graphs,$file); + } + + return \@graphs; +} + +sub convertOdToBinMatrix { + my ($data,$min,$max,$nonice) = @_; + + my ($num,$ymax,$xmax,$xmin,$step,%vals,$tmp,@matrix,$bin,$tmpbin); + + #make nice xmax value + if(defined $max) { + $xmax = $max; + } else { + $xmax = (sort {$b <=> $a} keys %$data)[0]; + } + $bin = &getBinVal($xmax); + $xmax = $bin*100; + $xmin = (defined $min ? $min : 0); + + #get data to bin and find y axis max value + $ymax = 0; + $tmp = 0; + $tmpbin = $bin; + foreach my $i ($xmin..$xmax) { + if(exists $data->{$i}) { + $tmp += $data->{$i}; + } + if(--$tmpbin <= 0) { + $tmpbin = $bin; + $ymax = &max($ymax,$tmp); + push(@matrix,$tmp); + $tmp = 0; + } + } + + #make nice ymax value + unless($nonice) { + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); +# $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100)))); +# $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step); + } + + return (\@matrix,$xmax,$ymax); +} + +sub getBinVal { + my $val = shift; + my $step; + if(!$val || $val <= 100) { + return 1; + } elsif($val < 10000) { + return int($val/100)+($val % 100 ? 1 : 0); + } elsif($val < 100000) { + return 1000; + } else { + $step = 1000000; + my $xmax = ($val % $step ? sprintf("%d",($val/$step+1))*$step : $val); + return ($xmax/100); + } +} + +sub max { + my ($a,$b) = @_; + return ($a < $b ? $b : $a); +} + +sub min { + my ($a,$b) = @_; + return ($a > $b ? $b : $a); +} + +sub createAnnotBarPlot { + my ($matrix,$xmax,$ymax,$annot,$title,$xlab,$ylab,$file,$zero,$add) = @_; + + my $bin = 1; + if($xmax > 100) { + $bin = $xmax / 100; + $xmax = 100; + } + + my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff + my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2 + my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff + my @std1col = (0, 0, 0, 0.04); #ff7f7f + my @std2col = (0, 0, 0, 0.03); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @helplinecol = (1, 1, 1, 0.9); + my @background = (0.95, 0.95, 0.95, 1); + my @tickcol = (0, 0, 0, 0.8); + my @labelcol = (0, 0, 0, 1); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 40; + my $bottom = 15; + my $top = 20; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(@background); + $cr->fill; + + #draw ticks + #x-axis + $cr->set_source_rgba(@tickcol); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(@tickcol); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%10) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*$bin); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(@labelcol); + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : '')); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset+10); + $cr->show_text($ylab.($bin>1 ? ' (per bin)' : '')); + + $cr->restore; + + #draw annotations + if($annot) { + $cr->set_antialias('none'); + my ($std1l,$std2l,$std1r,$std2r); + #std boxes + $std1l = int($annot->{mean})-int($annot->{std}); + $std2l = int($annot->{mean})-2*int($annot->{std}); + $std1r = int($annot->{mean})+int($annot->{std}); + $std2r = int($annot->{mean})+2*int($annot->{std}); + unless($std1l == $std1r) { + if($std1l < 0) { + $std1l = 0; + } else { + $std1l = int($std1l/$bin); + } + if($std2l < 0) { + $std2l = 0; + } else { + $std2l = int($std2l/$bin); + } + if($std1r/$bin > 100) { + $std1r = 100; + } else { + $std1r = int($std1r/$bin); + } + if($std2r/$bin > 100) { + $std2r = 100; + } else { + $std2r = int($std2r/$bin); + } + $cr->rectangle($left+$offset+$std2l*$size+2, $top+$offset, ($std2r-$std2l)*$size, $height); + $cr->set_source_rgba(@std2col); + $cr->fill; + $cr->rectangle($left+$offset+$std1l*$size+2, $top+$offset, ($std1r-$std1l)*$size, $height); + $cr->set_source_rgba(@std1col); + $cr->fill; + #mean line + $cr->set_source_rgba(@meancol); + $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2, $top+$offset+$height); + $cr->stroke; + #std lines + $cr->set_source_rgba(@stdcol); + if($std1l > 0) { + $cr->move_to($left+$offset+$std1l*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std1l*$size+2, $top+$offset+$height); + } + if($std2l > 0) { + $cr->move_to($left+$offset+$std2l*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std2l*$size+2, $top+$offset+$height); + } + if($std1r < 100) { + $cr->move_to($left+$offset+$std1r*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std1r*$size+2, $top+$offset+$height); + } + if($std2r < 100) { + $cr->move_to($left+$offset+$std2r*$size+2, $top+$offset-5); + $cr->line_to($left+$offset+$std2r*$size+2, $top+$offset+$height); + } + $cr->stroke; + #labels + $cr->set_antialias('default'); + $cr->set_source_rgba(@tickcol); + $extents = $cr->text_extents('M'); + $cr->move_to($left+$offset+int(int($annot->{mean})/$bin)*$size+2-$extents->{width}/2, $top+$offset-10); + $cr->show_text('M'); + if($std1l > 0) { + $extents = $cr->text_extents('1SD'); + $cr->move_to($left+$offset+$std1l*$size-$extents->{width}/2+2, $top+$offset-10); + $cr->show_text('1SD'); + } + if($std2l > 0) { + $extents = $cr->text_extents('2SD'); + $cr->move_to($left+$offset+$std2l*$size-$extents->{width}/2+3, $top+$offset-10); + $cr->show_text('2SD'); + } + if($std1r < 100) { + $extents = $cr->text_extents('1SD'); + $cr->move_to($left+$offset+$std1r*$size-$extents->{width}/2+2, $top+$offset-10); + $cr->show_text('1SD'); + } + if($std2r < 100) { + $extents = $cr->text_extents('2SD'); + $cr->move_to($left+$offset+$std2r*$size-$extents->{width}/2+3, $top+$offset-10); + $cr->show_text('2SD'); + } + } + } + + #draw boxes + $cr->set_antialias('none'); + $cr->set_source_rgba(@barcol); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + next unless($matrix->[$pos]); + my $tmp = $matrix->[$pos] / $ymax; + #unique + if($tmp) { + $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height, $size-1, -$tmp*$height); + $cr->fill; + } + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertToPCAValues { + my ($new,$type) = @_; + + my @data = ($type eq 'v' ? @$DINUCODDS_VIR : @$DINUCODDS_MIC); + + push(@data,$new); + + my $pca = Statistics::PCA->new; + + #suppress output from PCA module + my $output = ''; + open(TOOUTPUT, '>', \$output) or &printError("Can't open TOOUTPUT: $!"); + select TOOUTPUT; + + $pca->load_data({format => 'table', data => \@data}); + $pca->pca(); + + my @variances = $pca->results('proportion'); + my @list = $pca->results('transformed'); + + #end suppress output from PCA module + select STDOUT; + close(TOOUTPUT); + + my ($xmin,$xmax,$ymin,$ymax); + $xmax = $ymax = -100; + $xmin = $ymin = 100; + + #get min/max values for PC1 + foreach my $v (@{$list[0]}) { + $xmax = &max($xmax,$v); + $xmin = &min($xmin,$v); + } + #get min/max values for PC2 + foreach my $v (@{$list[1]}) { + $ymax = &max($ymax,$v); + $ymin = &min($ymin,$v); + } + + return ([$list[0],$list[1]],sprintf("%d",$variances[0]*100),sprintf("%d",$variances[1]*100),$xmin,$xmax,$ymin,$ymax,$type); +} + +sub createPCAPlot { + my ($data,$var1,$var2,$xmin,$xmax,$ymin,$ymax,$type,$title,$xlab,$ylab,$file) = @_; + + my @linecol = (0, 0, 0, 0.4); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 5; + my $offset = 20; + my $left = 25; + my $bottom = 15; + my $top = ($type eq 'v' ? 35 : 20); + my $height = 500; + my $space = 10; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+$height+2*$space,$top+$bottom+$offset*2+$height+2*$space); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face('sans-serif', 'normal', 'normal'); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, $height+2*$space, $height+2*$space); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #get infos + my $num = scalar(@{$data->[0]})-1; + my $xrange = ($xmax-$xmin); + my $yrange = ($ymax-$ymin); + my $data_info = ($type eq 'v' ? $DATA_VIR : $DATA_MIC); + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->move_to($left+$offset+$space, $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space, $top+$offset+$height+2*$space+3); + $cr->move_to($left+$offset+$space+$height, $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space+$height, $top+$offset+$height+2*$space+3); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space); + $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space+3); + $cr->stroke; + #y-axis + $cr->move_to($left+$offset, $top+$offset+$space); + $cr->line_to($left+$offset-3, $top+$offset+$space); + $cr->move_to($left+$offset, $top+$offset+$height+$space); + $cr->line_to($left+$offset-3, $top+$offset+$height+$space); + $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->line_to($left+$offset-3, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset); + $cr->line_to($left+$offset+$space+int(abs($xmin)/$xrange*$height), $top+$offset+$height+2*$space); + $cr->stroke; + $cr->move_to($left+$offset, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->line_to($left+$offset+2*$space+$height, $top+$offset+$space+int(abs($ymax)/$yrange*$height)); + $cr->stroke; + + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + $extents = $cr->text_extents(sprintf("%.2f",$xmin)); + $cr->move_to($left+$offset+$space-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(sprintf("%.2f",$xmin)); + $extents = $cr->text_extents(sprintf("%.2f",$xmax)); + $cr->move_to($left+$offset+$space+$height-$extents->{width}/2-1, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(sprintf("%.2f",$xmax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset+$space+int(abs($xmin)/$xrange*$height)-$extents->{width}/2, $top+$offset+$height+2*$space+$fontheight+2); + $cr->show_text(0); + #y-axis + $extents = $cr->text_extents(sprintf("%.2f",$ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$ymax)); + $extents = $cr->text_extents(sprintf("%.2f",$ymin)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height+$space+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$ymin)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$space+int(abs($ymax)/$yrange*$height)+$fontheight/2-2); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #add type + $cr->set_source_rgba(0, 0, 0, 0.5); + $extents = $cr->text_extents(uc($type)); + $cr->arc($offset/2+$extents->{width}/2, $offset-5, 10, 0, 2*$PI); + $cr->fill; + $cr->set_source_rgba(1, 1, 1, 1); + $cr->move_to($offset/2-($type eq 'm' ? 1 : 0), $offset); + $cr->show_text(uc($type)); + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab.' ('.$var1.'%)'); + $cr->move_to($left+$offset+$height/2-$extents->{width}/2+$space, $top+$offset+$height+$fontheight+15+2*$space); + $cr->show_text($xlab.' ('.$var1.'%)'); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.' ('.$var2.'%)'); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2)+$space,$offset); + $cr->show_text($ylab.' ('.$var2.'%)'); + + $cr->restore; + + #draw dots + $cr->set_antialias('default'); + $cr->set_font_size (10); + foreach my $i (0..$num) { + $cr->set_source_rgba(@{$data_info->[$i]->[3]}); + $cr->arc(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height)), ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height)), $size, 0, 2*$PI); + $cr->fill; + } + $cr->set_source_rgba(0, 0, 0, 1); + foreach my $i (0..$num) { + $extents = $cr->text_extents($data_info->[$i]->[1]); + $cr->move_to(($left+$offset+$space+int(($data->[0]->[$i]+abs($xmin))/$xrange*$height))+$size+1, ($space+$top+$offset+int(($data->[1]->[$i]+abs($ymin))/$yrange*$height))+$size*2); + $cr->show_text($data_info->[$i]->[1]); + } + + #draw legend + my %labels; + foreach my $i (0..$num) { + $labels{$data_info->[$i]->[1]} = $data_info->[$i]->[2]; + } + $cr->set_font_size(10); + $fontheight = $font_extents->{height}; + $cr->set_source_rgba(0, 0, 0, 1); + my $x = $left+$offset+$space; + my $y = int($offset/2); + foreach my $n (sort {$a <=> $b} keys %labels) { + if($x+$cr->text_extents($n.' - '.$labels{$n})->{width}+15 >= $left+$offset+$space+$height) { + $x = $left+$offset+$space; + $y += $fontheight; + } + $cr->move_to($x,$y); + $cr->show_text($n.' - '.$labels{$n}); + $x += $cr->text_extents($n.' - '.$labels{$n})->{width}+15; + + } + + #write image + $cr->show_page; + return $surface; +} + +sub createOddsRatioPlot { + my ($data,$title,$xlab,$ylab,$file) = @_; + + my @yvalues = (0.5,0.78,1.00,1.23,1.5); + + my @linecol = (0, 0, 0, 0.4); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 40; + my $offset = 20; + my $left = 35; + my $right = 90; + my $bottom = 20; + my $top = 0; + my $height = 100; + my $width = $size*10; + my $space = 20; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+$width+$right,$top+$bottom+$offset*2+$height); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, $width, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #right side marks + $cr->set_source_rgba(255/255, 127/255, 127/255, 0.6); + $cr->rectangle($left+$offset+$width+8, $top+$offset, 3, 0.77/2*$height); + $cr->fill; + $cr->rectangle($left+$offset+$width+8, $top+$offset+$height-0.78/2*$height, 3, 0.78/2*$height); + $cr->fill; + + #get infos + my $num = scalar(keys %$data)-1; + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + foreach my $i (0..$num) { + $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset+$height); + $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height+3); + } + $cr->stroke; + #y-axis + foreach my $i (@yvalues) { + $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height); + $cr->line_to($left+$offset-3, $top+$offset+$height-$i/2*$height); + } + $cr->stroke; + + #helplines + #x-axis + $cr->set_source_rgba(@helplinecol1); + foreach my $i (0..$num) { + $cr->move_to($left+$offset+$size/2+$i*$size, $top+$offset); + $cr->line_to($left+$offset+$size/2+$i*$size, $top+$offset+$height); + } + $cr->stroke; + #yaxis + foreach my $i (@yvalues) { + $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.1 : 0.3)); + $cr->move_to($left+$offset, $top+$offset+$height-$i/2*$height); + $cr->line_to($left+$offset+$width, $top+$offset+$height-$i/2*$height); + $cr->stroke; + } + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + my $xcur = 0; + foreach my $dn (map {join("/",(m/../g ))} sort keys %$data) { + $extents = $cr->text_extents($dn); + $cr->move_to($left+$offset+$size/2-$extents->{width}/2-1+$size*$xcur++, $top+$offset+$height+$fontheight+2); + $cr->show_text($dn); + } + #y-axis + foreach my $i (@yvalues) { + $cr->set_source_rgba(0, 0, 0, ($i == 0.5 || $i == 1.00 || $i == 1.50 ? 0.5 : 0.8)); + $extents = $cr->text_extents(sprintf("%.2f",$i)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$height-$i/2*$height+$fontheight/2-2); + $cr->show_text(sprintf("%.2f",$i)); + } + + #label on right side + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents('Over-represented'); + $cr->move_to($left+$offset+$width+15, $top+$offset+$height-1.6/2*$height+$fontheight/2-2); + $cr->show_text('Over-represented'); + $extents = $cr->text_extents('Under-represented'); + $cr->move_to($left+$offset+$width+15, $top+$offset+$height-0.4/2*$height+$fontheight/2-2); + $cr->show_text('Under-represented'); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + #x-axis + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab); + $cr->move_to($left+$offset+$width/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab); + #y-axis + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw dots + $cr->set_antialias('default'); + $xcur = 0; + foreach my $dn (sort keys %$data) { + if($data->{$dn} > 1.23 || $data->{$dn} < 0.78) { + $cr->set_source_rgba(255/255, 127/255, 127/255, 1); + } else { + $cr->set_source_rgba(127/255, 127/255, 255/255, 1); + } + $cr->arc($left+$offset+$size/2+$size*$xcur++, $top+$offset+$height-$data->{$dn}/2*$height, 5, 0, 2*$PI); + $cr->fill; + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertToBoxValues { + my ($data,$niceval) = @_; + my ($xmax,$ymax,@matrix); + $xmax = $ymax = 0; + foreach my $i (sort {$a <=> $b} keys %$data) { + $xmax++; + push(@matrix,[$i,$data->{$i}->{min},$data->{$i}->{p25},$data->{$i}->{median},$data->{$i}->{p75},$data->{$i}->{max}]); + $ymax = &max($ymax,$data->{$i}->{max}); + } + + if($niceval) { + $ymax = sprintf("%d",($ymax/$niceval)+1)*$niceval if($ymax % $niceval); + } + + return (\@matrix,$xmax,$ymax); +} + +sub createBoxPlot { + my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero,$add,$bin) = @_; + $bin = ($bin ? $bin : 1); + $zero = 0 unless($zero); + $add = '' unless(defined $add); + if($xmax != 100) { + $xmax = 100; + } + $ymax = 1 unless($ymax); +# die Dumper $matrix; + + + my @col0 = (178/255, 178/255, 255/255); #b2b2ff + my @col1 = (255/255, 178/255, 178/255); #ffb2b2 + my @col3 = (127/255, 127/255, 255/255); #7f7fff + my @col4 = (255/255, 127/255, 127/255); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @linecol0 = (@col3, 1); + my @linecol1 = (@col4, 1); + my @boxcol = (@col3, 1); + my @whiscol = (@col0, 0.9); + my @medcol = (0,0,0, 0.5); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 25; + my $bottom = 25; + my $top = 5; + my $height = 300; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); +# $cr->set_font_size (30); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #draw legend + $cr->set_font_size(10); +# $font_extents = $cr->font_extents; + my $x = $left+$offset+$size*50; + foreach my $v ([\@whiscol,'Min/Max value'],[\@boxcol,'25th to 75th percentile'],[\@medcol,'Median']) { + $cr->set_antialias('none'); + $cr->set_source_rgba(@{$v->[0]}); + $cr->rectangle($x, $top+5, 10, 10); + $cr->fill; + $x += 15; + $cr->set_antialias('default'); + $cr->move_to($x,$top+5+9); + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->show_text($v->[1]); + $x += $cr->text_extents($v->[1])->{width}+15; + } + + $cr->set_antialias('none'); + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); +# $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height); +# $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+3); +# $cr->move_to($left+$offset+int($size/2+1), $top+$offset+$height+$space); +# $cr->line_to($left+$offset+int($size/2+1), $top+$offset+$height+$space-3); + foreach my $i (1..9) { + $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); +# $cr->move_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset); +# $cr->line_to($left+$offset+int($size/2)+$size*10*$i-($zero ? 0 : $size)-1, $top+$offset-3); + } + $cr->stroke; + #y-axis + foreach my $j (0..4) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset-3, $top+$offset+$height*$j/4-($j ? 1 : 0)); +# $cr->move_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); +# $cr->line_to($left+$offset+($xmax+$zero)*$size+3, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis +# $extents = $cr->text_extents(1); +# $cr->move_to($left+$offset+int($size/2+1)-$extents->{width}, $top+$offset+$height+$fontheight+2); +# $cr->show_text(1); + foreach my $i (1..9) { + $extents = $cr->text_extents($i*10*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*10*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*10*$bin); + } + #y-axis + foreach my $j (0..4) { + $extents = $cr->text_extents(&addCommas($ymax*$j/4)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height*(4-$j)/4); + $cr->show_text(&addCommas($ymax*$j/4)); + } + + $cr->save; + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw boxes + my $factor = $height/$ymax; + $cr->set_antialias('none'); + foreach my $v (@$matrix) { + #wiskers + $cr->set_source_rgba(@whiscol); + if($v->[1] != $v->[2]) { + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[1]*$factor-1); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[1]*$factor-1); + $cr->stroke; + } + if($v->[4] != $v->[5]) { + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[5]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[5]*$factor); + $cr->stroke; + } + $cr->save; + $cr->set_dash(1,4,3); + if($v->[1] != $v->[2]) { + $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[2]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[1]*$factor); + $cr->stroke; + } + if($v->[4] != $v->[5]) { + $cr->move_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[5]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+int($size/2)-1, $top+$offset+$height-$v->[4]*$factor-1); + $cr->stroke; + } + $cr->restore; + #box + if(($v->[2] != $v->[3]) || ($v->[4] != $v->[3])) { + $cr->set_source_rgba(@whiscol); + $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-1, -($v->[4]-$v->[2])*$factor); + $cr->fill; + $cr->stroke; + $cr->set_source_rgba(@boxcol); + $cr->rectangle($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[2]*$factor, $size-2, -($v->[4]-$v->[2])*$factor); + $cr->stroke; + } else { + $cr->set_source_rgba(@boxcol); + $cr->move_to($left+$offset+$size*$v->[0], $top+$offset+$height-$v->[3]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-1, $top+$offset+$height-$v->[3]*$factor); + $cr->stroke; + } + #median + $cr->set_source_rgba(@medcol); + $cr->move_to($left+$offset+$size*$v->[0]+1, $top+$offset+$height-$v->[3]*$factor); + $cr->line_to($left+$offset+$size*$v->[0]+$size-2, $top+$offset+$height-$v->[3]*$factor); + $cr->stroke; + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertToBarValues { + my ($data,$niceval,$start,$max) = @_; + my ($xmax,$ymax,@matrix,$tmp); + $xmax = $ymax = 0; + + #get xmax value + if($max) { + $xmax = $max; + } else { + foreach my $q (keys %$data) { + $xmax = &max($xmax,$q); + } + } + if($niceval) { + $xmax = sprintf("%d",($xmax/$niceval)+1)*$niceval if($xmax % $niceval); + } + + #get matrix values + foreach my $q ($start..$xmax) { + $tmp = (exists $data->{$q} ? $data->{$q} : 0); + $ymax = &max($ymax,$tmp); + push(@matrix,$tmp); + } + + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); + + return (\@matrix,$xmax,$ymax); +} + +sub createBarPlot { + my ($matrix,$xmax,$ymax,$title,$xlab,$ylab,$file,$zero) = @_; + + my @col0 = (178/255, 178/255, 255/255); #b2b2ff + my @col1 = (255/255, 178/255, 178/255); #ffb2b2 + my @col3 = (127/255, 127/255, 255/255); #7f7fff + my @col4 = (255/255, 127/255, 127/255); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @linecol0 = (@col3, 1); + my @linecol1 = (@col4, 1); + my @barcol0 = (@col3, 1); + my @barcol1 = (@col4, 1); + my @helplinecol1 = (1,1,1, 0.9); + my @helplinecol2 = (1,1,1, 0.5); + + #create new image + my $size = ($xmax <= 50 ? 10 : ($xmax <= 100 ? 6 : 3)); + my $offset = 20; + my $left = 25; + my $bottom = 15; + my $top = 0; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); +# $cr->set_font_size (30); + + $cr->save; + + #set up work space + my ($dx, $dy); + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(0.95, 0.95, 0.95, 1); + $cr->fill; + + #draw ticks + #x-axis + $cr->set_source_rgba(0, 0, 0, 0.8); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol1); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(0, 0, 0, 0.8); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size (14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(0, 0, 0, 1); + $extents = $cr->text_extents($xlab); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2),$offset); + $cr->show_text($ylab); + + $cr->restore; + + #draw boxes + $cr->set_antialias('none'); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + next unless($matrix->[$pos+($zero ? 0 : 1)]); + my $tmp = $matrix->[$pos+($zero ? 0 : 1)] / $ymax; + #unique + if($tmp) { + $cr->set_source_rgba(@barcol0); + $cr->rectangle($left+$offset+($pos+($zero ? 0 : 1))*$size, $top+$offset+$height, $size-1, -$tmp*$height); + $cr->fill; + } + } + + #write image + $cr->show_page; + return $surface; +} + +sub convertOdToStackBinMatrix { + my ($data,$stacks,$min,$max,$nonice) = @_; + + my ($num,$ymax,$xmax,$xmin,$step,%vals,%sums,$sum,@matrix,$bin,$tmpbin); + + #make nice xmax value + if(defined $max) { + $xmax = $max; + } else { + $xmax = (sort {$b <=> $a} keys %$data)[0]; + } + $bin = &getBinVal($xmax); + $xmax = $bin*100; + $xmin = (defined $min ? $min : 0); + + #get data to bin and find y axis max value + $ymax = 0; + foreach my $s (0..$stacks-1) { + $sums{$s} = 0; + } + $sum = 0; + $tmpbin = $bin; + foreach my $i ($xmin..$xmax) { + foreach my $s (0..$stacks-1) { + next unless(exists $data->{$i}->{$s}); + $sums{$s} += $data->{$i}->{$s}; + $sum += $data->{$i}->{$s}; + } + if(--$tmpbin <= 0) { + $tmpbin = $bin; + $ymax = &max($ymax,$sum); + $sum = 0; + foreach my $s (0..$stacks-1) { + push(@{$matrix[$s]},$sums{$s}); + $sums{$s} = 0; + } + } + } + + #make nice ymax value + unless($nonice) { + $ymax = sprintf("%d",($ymax/4)+1)*4 if($ymax % 4); +# $step = ($ymax <= 10 ? 10 : ($ymax < 40 ? 40 : ($ymax < 100 ? 100 : ($ymax < 1000 ? 100 : 100)))); +# $ymax = sprintf("%d",($ymax/$step)+1)*$step if($ymax % $step); + } + + return (\@matrix,$xmax,$ymax,$stacks); +} + +sub createStackBarPlot { + my ($matrix,$xmax,$ymax,$stacks,$title,$xlab,$ylab,$file,$zero,$add) = @_; + + my $bin = 1; + if($xmax > 100) { + $bin = $xmax / 100; + $xmax = 100; + } + + my @legend = ('Exact dupl.','5\' dupl.','3\' dupl.','Rev. compl. exact dupl.','Rev. compl. 5\'/3\' dupl.'); + my @cols = ([69/255, 114/255, 167/255, 1], + [137/255, 1165/255, 78/255, 1], + [170/255, 70/255, 67/255, 1], + [147/255, 169/255, 207/255, 1], + [51/255, 102/255, 102/255, 1]); + my @barcol = (127/255, 127/255, 255/255, 1); #b2b2ff + my @meancol = (255/255, 127/255, 127/255, 1); #ffb2b2 + my @stdcol = (178/255, 178/255, 255/255, 0.8); #7f7fff + my @std1col = (0, 0, 0, 0.02); #ff7f7f + my @std2col = (0, 0, 0, 0.02); #ff7f7f + my @linecol = (0, 0, 0, 0.4); + my @helplinecol = (1, 1, 1, 0.9); + my @background = (0.95, 0.95, 0.95, 1); + my @tickcol = (0, 0, 0, 0.8); + my @labelcol = (0, 0, 0, 1); + + #create new image + my $size = 6; + my $offset = 20; + my $left = 40; + my $bottom = 15; + my $top = 20; + my $height = 200; + my $surface = Cairo::ImageSurface->create('argb32', $left+$offset*2+($xmax+$zero)*$size,$bottom+$top+$offset*2+$height); #format, width, height + my $cr = Cairo::Context->create($surface); + + my ($font_extents,$extents,$fontheight,$fontdescent); + + #background + $cr->rectangle(0, 0, $left+$offset*2+($xmax+$zero)*$size,$bottom+$offset*2+2*200+20); + $cr->set_source_rgba(1, 1, 1, 1); + $cr->fill; + + #fonts + $cr->select_font_face ('sans', 'normal', 'normal'); + + $cr->save; + + #set up work space + $cr->set_antialias('none'); + $cr->set_line_width(1); + + #background for plot + $cr->rectangle($left+$offset, $top+$offset, ($xmax+$zero)*$size-1, $height); + $cr->set_source_rgba(@background); + $cr->fill; + + #draw legend + $cr->set_font_size(10); +# $font_extents = $cr->font_extents; + my $x = $left+$offset+$size*100-5; + foreach my $i (reverse (0..scalar(@legend)-1)) { + $cr->set_antialias('default'); + $x -= $cr->text_extents($legend[$i])->{width}; + $cr->move_to($x,$top+5+9); + $cr->set_source_rgba(@tickcol); + $cr->show_text($legend[$i]); + $x -= 15; + $cr->set_antialias('none'); + $cr->set_source_rgba(@{$cols[$i]}); + $cr->rectangle($x, $top+5, 10, 10); + $cr->fill; + $x -= 15; + } + + #draw ticks + $cr->set_antialias('none'); + #x-axis + $cr->set_source_rgba(@tickcol); + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%5) == 0 && $i > 1 && $i < $xmax) { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+3); + } else { + $cr->move_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height); + $cr->line_to($left+$offset+int($size/2)+$size*$i-($zero ? 0 : $size)-1, $top+$offset+$height+1); + } + } + $cr->stroke; + + #y-axis + $cr->move_to($left+$offset, $top+$offset); + $cr->line_to($left+$offset-3, $top+$offset); + $cr->move_to($left+$offset, $top+$offset+$height-1); + $cr->line_to($left+$offset-3, $top+$offset+$height-1); + $cr->stroke; + + #helplines + $cr->set_source_rgba(@helplinecol); + foreach my $j (1..3) { + $cr->move_to($left+$offset, $top+$offset+$height*$j/4-($j ? 1 : 0)); + $cr->line_to($left+$offset+($xmax+$zero)*$size, $top+$offset+$height*$j/4-($j ? 1 : 0)); + } + $cr->stroke; + + $cr->set_antialias('default'); + + #tick labels + $cr->set_source_rgba(@tickcol); + $cr->set_font_size(10); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + #x-axis + foreach my $i (($zero ? 0 : 1)..$xmax) { + if(($i%10) == 0 && $i > 1 && $i < $xmax) { + $extents = $cr->text_extents($i*$bin); + $cr->move_to($left+$offset+int($size/2+1)+$size*$i-($zero ? 0 : $size)-$extents->{width}/2-1-($i == 1 ? 1 : 0), $top+$offset+$height+$fontheight+2); + $cr->show_text($i*$bin); + } + } + #y-axis + $extents = $cr->text_extents(&addCommas($ymax)); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2); + $cr->show_text(&addCommas($ymax)); + $extents = $cr->text_extents(0); + $cr->move_to($left+$offset-5-$extents->{width}, $top+$offset+$fontheight/2-2+$height); + $cr->show_text(0); + + $cr->save; + + #labels + $cr->set_font_size(14); + $font_extents = $cr->font_extents; + $fontheight = $font_extents->{height}; + + #axis labels + $cr->set_source_rgba(@labelcol); + $extents = $cr->text_extents($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->move_to($left+$offset+($xmax+$zero)*$size/2-$extents->{width}/2, $top+$offset+$height+$fontheight+15); + $cr->show_text($xlab.($bin>1 ? ' (Bin size: '.$bin.($add ? $add.')' : '') : '')); + $cr->rotate($PI * 3 / 2); + $extents = $cr->text_extents($ylab.($bin>1 ? ' (per bin)' : '')); + $cr->move_to(-($top+$offset+$height/2+$extents->{width}/2+($bin>1 ? 12 : 0)),$offset+10); + $cr->show_text($ylab.($bin>1 ? ' (per bin)' : '')); + + $cr->restore; + + #draw boxes + $cr->set_antialias('none'); + foreach my $pos (0..$xmax-($zero ? 0 : 1)) { + my $tmp = 0; + foreach my $s (0..$stacks-1) { + next unless($matrix->[$s]->[$pos]); + my $cur = $matrix->[$s]->[$pos] / $ymax; + $cr->set_source_rgba(@{$cols[$s]}); + if($cur) { + $cr->rectangle($left+$offset+$pos*$size, $top+$offset+$height-$tmp*$height, $size-1, -$cur*$height); + $cr->fill; + } + $tmp += $cur; + } + } + + #write image + $cr->show_page; + return $surface; +} + +sub header { + return '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>PRINSEQ-'.$WHAT.' Report</title> +<style type="text/css"> +<!--/* <![CDATA[ */ +'.$CSS_STYLE.' +/* ]]> */--> +</style> +</head> +<body> +<center>'; +} + +sub footer { + return '</center></body></html>'; +} + +sub generateHtml { + my ($in,$out) = @_; + my ($file,$data,$surface,$html,$png); + $data = &readGdFile($in); + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + + $html .= &header(); + $html .= '<h2>PRINSEQ-'.$WHAT.' v'.$VERSION.' HTML Report </h2>[Generated: '.$time.']<br /><br />'; + $html .= '<div class="info-panel">'; + + #input info + if(exists $data->{numseqs}) { + $html .= '<div class="info-header"><span class="info-header-title">Input Information</span></div>'; + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Input file(s):</td><td class="info-table-value">'.($data->{filename1} ? &convertIntToString($data->{filename1}) : '-').($data->{filename2} ? ' and '.&convertIntToString($data->{filename2}) : '').'</td></tr><tr><td class="info-table-type">Input format(s):</td><td class="info-table-value">'.($data->{format1} ? uc($data->{format1}) : '-').($data->{format2} ? ' and '.uc($data->{format2}) : '').'</td></tr>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + my $singletons1 = ($data->{numseqs}||0)-($data->{pairs}||0); + my $singletons2 = ($data->{numseqs2}||0)-($data->{pairs}||0); + $html .= '<tr><td class="info-table-type"># Sequences (file 1):</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 1):</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr><tr><td class="info-table-type"># Sequences (file 2):</td><td class="info-table-value">'.&addCommas($data->{numseqs2}||'-').'</td></tr><tr><td class="info-table-type">Total bases (file 2):</td><td class="info-table-value">'.&addCommas($data->{numbases2}||'-').'</td></tr><tr><td class="info-table-type"># Pairs:</td><td class="info-table-value">'.&addCommas($data->{pairs}||'-').($data->{pairs} ? ' ('.sprintf("%.2f",(100*(2*$data->{pairs})/(($data->{numseqs}||0)+($data->{numseqs2}||0)))).'% of sequences)' : '').'</td></tr></tr><tr><td class="info-table-type"># Singletons (file 1):</td><td class="info-table-value">'.&addCommas($singletons1).($singletons1 ? ' ('.sprintf("%.2f",(100*$singletons1/$data->{numseqs})).'%)' : '').'</td></tr><tr><td class="info-table-type"># Singletons (file 2):</td><td class="info-table-value">'.&addCommas($singletons2).($singletons2 ? ' ('.sprintf("%.2f",(100*$singletons2/$data->{numseqs2})).'%)' : '').'</td></tr>'; + } else { + $html .= '<tr><td class="info-table-type"># Sequences:</td><td class="info-table-value">'.&addCommas($data->{numseqs}||'-').'</td></tr><tr><td class="info-table-type">Total bases:</td><td class="info-table-value">'.&addCommas($data->{numbases}||'-').'</td></tr>'; + } + $html .= '</tbody></table></div><hr>'; + } + + #length plot + if(exists $data->{counts}->{length} && keys %{$data->{counts}->{length}}) { + $html .= '<div class="info-header"><span class="info-header-title">Length Distribution</span></div>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' ± '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mean} ? sprintf("%.2f",$data->{stats2}->{length}->{mean}) : '-').' ± '.(exists $data->{stats2}->{length}->{std} ? sprintf("%.2f",$data->{stats2}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{min} ? &addCommas($data->{stats2}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{max} ? &addCommas($data->{stats2}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats2}->{length}->{range} ? &addCommas($data->{stats2}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{length}->{mode} ? &addCommas($data->{stats2}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats2}->{length}->{modeval} ? &addCommas($data->{stats2}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{length},1),$data->{stats2}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } else { + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mean} ? sprintf("%.2f",$data->{stats}->{length}->{mean}) : '-').' ± '.(exists $data->{stats}->{length}->{std} ? sprintf("%.2f",$data->{stats}->{length}->{std}) : '-').' bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{min} ? &addCommas($data->{stats}->{length}->{min}) : '-').' bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{max} ? &addCommas($data->{stats}->{length}->{max}) : '-').' bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">'.(exists $data->{stats}->{length}->{range} ? &addCommas($data->{stats}->{length}->{range}) : '-').' bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">'.(exists $data->{stats}->{length}->{mode} ? &addCommas($data->{stats}->{length}->{mode}) : '-').' bp with '.(exists $data->{stats}->{length}->{modeval} ? &addCommas($data->{stats}->{length}->{modeval}) : '-').' sequences</td></tr></tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{length},1),$data->{stats}->{length},'Length Distribution','Read Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } + $html .= '<hr>'; + } + + #GC content + if(exists $data->{counts}->{gc} && keys %{$data->{counts}->{gc}}) { + $html .= '<div class="info-header"><span class="info-header-title">GC Content Distribution</span></div>'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<div class="info-content"><b>File 1</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + $html .= '<div class="info-content"><br /><b>File 2</b><br /><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mean} ? sprintf("%.2f",$data->{stats2}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats2}->{gc}->{std} ? sprintf("%.2f",$data->{stats2}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{min} ? $data->{stats2}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{max} ? $data->{stats2}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{range} ? $data->{stats2}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats2}->{gc}->{mode} ? $data->{stats2}->{gc}->{mode} : '-').' % with '.(exists $data->{stats2}->{gc}->{modeval} ? &addCommas($data->{stats2}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{gc},0),$data->{stats2}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } else { + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mean} ? sprintf("%.2f",$data->{stats}->{gc}->{mean}) : '-').' ± '.(exists $data->{stats}->{gc}->{std} ? sprintf("%.2f",$data->{stats}->{gc}->{std}) : '-').' %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{min} ? $data->{stats}->{gc}->{min} : '-').' %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{max} ? $data->{stats}->{gc}->{max} : '-').' %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{range} ? $data->{stats}->{gc}->{range} : '-').' %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">'.(exists $data->{stats}->{gc}->{mode} ? $data->{stats}->{gc}->{mode} : '-').' % with '.(exists $data->{stats}->{gc}->{modeval} ? &addCommas($data->{stats}->{gc}->{modeval}) : '-').' sequences</td></tr> </tbody></table><br>'; + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{gc},0),$data->{stats}->{gc},'GC Content Distribution','GC Content (0-100%)','Number of Sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $html .= '</div>'; + } + $html .= '<hr>'; + } + + #Base quality + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '<div class="info-header"><span class="info-header-title">Base Quality Distribution</span></div><div class="info-content">'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + } + if(exists $data->{quals} && keys %{$data->{quals}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{quals},4),'Base Quality Distribution','Read position in %','Quality score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{qualsbin} && keys %{$data->{qualsbin}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval}); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{quals}); + $html .= &insert_image($png); + } + if(exists $data->{qualsmean} && keys %{$data->{qualsmean}}) { + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{qualsbin}); + $html .= &insert_image($png); + } + if(exists $data->{pairedend} && $data->{pairedend}) { + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + } + if(exists $data->{quals2} && keys %{$data->{quals2}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{quals2},4),'Base Quality Distribution','Read position in %','Quality score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{qualsbin2} && keys %{$data->{qualsbin2}}) { + $surface = &createBoxPlot(&convertToBoxValues($data->{qualsbin2},4),'Base Quality Distribution','Read position in bp','Quality score','',0,'bp',$data->{binval}); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{quals2}); + $html .= &insert_image($png); + } + if(exists $data->{qualsmean2} && keys %{$data->{qualsmean2}}) { + $surface = &createBarPlot(&convertToBarValues($data->{qualsmean2},5,1),'Sequence Quality Distribution','Mean of quality scores per sequence','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{qualsbin2}); + $html .= &insert_image($png); + } + } + if(exists $data->{quals} || exists $data->{qualsmean} || exists $data->{qualsbin}) { + $html .= '</div><hr>'; + } + + #Ns + if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) { + $html .= '<div class="info-header"><span class="info-header-title">Occurence of N</span></div><div class="info-content">'; + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + } + if(exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) { + my $nscount = 0; + foreach my $n (values %{$data->{counts}->{ns}}) { + $nscount += $n; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' ('.sprintf("%.2f",100/$data->{numseqs}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats}->{ns}->{max} ? $data->{stats}->{ns}->{max} : 0).' %</td></tr></tbody></table>'; + if($nscount) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + my $nscount = 0; + foreach my $n (values %{$data->{counts2}->{ns}}) { + $nscount += $n; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">'.($nscount ? &addCommas($nscount).' ('.sprintf("%.2f",100/$data->{numseqs2}*$nscount).' %)' : 0).'</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">'.(exists $data->{stats2}->{ns}->{max} ? $data->{stats2}->{ns}->{max} : 0).' %</td></tr></tbody></table>'; + if($nscount) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{ns},1),undef,'Percentage of N\'s (> 0%)','Percentage of N\'s per Read (1-100%)','# Sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if((exists $data->{counts}->{ns} && keys %{$data->{counts}->{ns}}) || (exists $data->{counts2} && exists $data->{counts2}->{ns} && keys %{$data->{counts2}->{ns}})) { + $html .= '</div><hr>'; + } + + #tails + if(exists $data->{tail} || exists $data->{tail2}) { + $html .= '<div class="info-header"><span class="info-header-title">Poly-A/T Tails</span></div><div class="info-content">'; + } + if(exists $data->{tail}) { + my $tail5count = 0; + foreach my $n (values %{$data->{counts}->{tail5}}) { + $tail5count += $n; + } + my $tail3count = 0; + foreach my $n (values %{$data->{counts}->{tail3}}) { + $tail3count += $n; + } + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' ('.sprintf("%.2f",100/$data->{numseqs}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' ('.sprintf("%.2f",100/$data->{numseqs}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats}->{tail5}->{max} ? $data->{stats}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats}->{tail3}->{max} ? $data->{stats}->{tail3}->{max} : 0).'</td></tr></tbody></table>'; + if($tail5count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + if($tail3count) { + $html .= '<br />'; + } + } + if($tail3count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{tail2}) { + my $tail5count = 0; + foreach my $n (values %{$data->{counts2}->{tail5}}) { + $tail5count += $n; + } + my $tail3count = 0; + foreach my $n (values %{$data->{counts2}->{tail3}}) { + $tail3count += $n; + } + $html .= '<br /><br /><br /><b>File 2</b><br />'; + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td> <td class="info-table-value">3\'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">'.($tail5count ? &addCommas($tail5count).' ('.sprintf("%.2f",100/$data->{numseqs2}*$tail5count).' %)' : 0).'</td> <td class="info-table-value">'.($tail3count ? &addCommas($tail3count).' ('.sprintf("%.2f",100/$data->{numseqs2}*$tail3count).' %)' : 0).'</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail5}->{max} ? $data->{stats2}->{tail5}->{max} : 0).'</td> <td class="info-table-value">'.(exists $data->{stats2}->{tail3}->{max} ? $data->{stats2}->{tail3}->{max} : 0).'</td></tr></tbody></table>'; + if($tail5count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail5},1),undef,'Poly-A/T Tail Distribution (> 4bp)','5\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + if($tail3count) { + $html .= '<br />'; + } + } + if($tail3count) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{counts2}->{tail3},1),undef,'Poly-A/T Tail Distribution (> 4bp)','3\' Tail Length in bp','# Sequences','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + } + if(exists $data->{tail} || exists $data->{tail2}) { + $html .= '</div><hr>'; + } + + + #tag sequence check + if(exists $data->{freqs} || exists $data->{freqs2}) { + $html .= '<div class="info-header"><span class="info-header-title">Tag Sequence Check</span></div><div class="info-content">'; + } + if(exists $data->{freqs}) { + my $tagmidseq; + if(exists $data->{tagmidseq}) { + $tagmidseq = $data->{tagmidseq}; + $tagmidseq =~ s/\,/\<br \/\>/g; + } + if(exists $data->{pairedend} && $data->{pairedend}) { + $html .= '<b>File 1</b><br />'; + } + $html .= '<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob}->{5} ? $data->{tagprob}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob}->{3} ? $data->{tagprob}->{3}.' %' : '-').'</td></tr><tr><td class="info-table-type">GSMIDs or RLMIDs:</td><td class="info-table-value">'.(exists $data->{tagmidnum} ? ($data->{tagmidnum} == 0 ? 'none' : ($tagmidseq ? $tagmidseq : $data->{tagmidnum})) : '-').'</td><td class="info-table-value"> </td></tr></tbody></table><br>'; + $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{5}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs}->{5}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{5}->{$pos}->{$base},14,1).'<br />'; + #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '<td align="center" valign="middle"> ... </td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs}->{3}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs}->{3}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs}->{3}->{$pos}->{$base},14,1).'<br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '</tr>'; + $html .= '<tr><td> </td>'; + foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) { + $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').' </td>'; + } + $html .= '</tr><tr><td align="left" valign="middle"> </td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>'; + $html .= '</table>'; + } + if(exists $data->{pairedend} && $data->{pairedend} && exists $data->{freqs2}) { + $html .= '<br /><br /><br /><b>File 2</b><br />'; + $html .= '<table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type"></td><td class="info-table-value">5\'-end</td><td class="info-table-value">3\'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">'.(exists $data->{tagprob2}->{5} ? $data->{tagprob2}->{5}.' %' : '-').'</td><td class="info-table-value">'.(exists $data->{tagprob2}->{3} ? $data->{tagprob2}->{3}.' %' : '-').'</td></tr></tbody></table><br>'; + $html .= '<table border="0" cellspacing="0" cellpadding="0"><tr><td>'.&insert_image($FREQCHART_L,undef,undef,1).'</td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{5}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs2}->{5}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{5}->{$pos}->{$base},14,1).'<br />'; + #'<img height="'.$data->{freqs}->{5}->{pos}->{$base}.'px" border="0" src="'..'" alt="'.$base.'" width="14px" /><br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '<td align="center" valign="middle"> ... </td>'; + foreach my $pos (sort {$a <=> $b} keys %{$data->{freqs2}->{3}}) { + $html .= '<td valign="bottom" align="center">'; + foreach my $base (qw(A C G T N)) { + if($data->{freqs2}->{3}->{$pos}->{$base}) { + $html .= &insert_image($BASE64_BASES->{$base},$data->{freqs2}->{3}->{$pos}->{$base},14,1).'<br />'; + } + } + $html .= &insert_image($MMCHART_B2,6,16,1).'</td>'; + } + $html .= '</tr>'; + $html .= '<tr><td> </td>'; + foreach my $num (1,0,0,0,5,0,0,0,0,10,0,0,0,0,15,0,0,0,0,20,0,20,0,0,0,0,15,0,0,0,0,10,0,0,0,0,5,0,0,0,1) { + $html .= '<td valign="top" align="center" style="font-size: 10px;margin: 0;">'.($num ? $num : '').' </td>'; + } + $html .= '</tr><tr><td align="left" valign="middle"> </td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr>'; + $html .= '</table>'; + } + if(exists $data->{freqs} || exists $data->{freqs2}) { + $html .= '</div><hr>'; + } + + #Sequence duplicates + if(exists $data->{dubslength} || exists $data->{dubscounts}) { + $html .= '<div class="info-header"><span class="info-header-title">Sequence Duplication</span></div>'; + } + my %dubs; + if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) { + my $exactonly = $data->{exactonly}||0; + foreach my $n (keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + $dubs{$s}->{count} += $data->{dubscounts}->{$n}->{$s} * $n; + $dubs{$s}->{max} = $n unless(exists $dubs{$s}->{max} && $dubs{$s}->{max} > $n); + $dubs{all} += $data->{dubscounts}->{$n}->{$s} * $n; + } + } + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value"># Sequences</td> <td class="info-table-value">Max duplicates</td></tr><tr><td class="info-table-type">Exact duplicates:</td><td class="info-table-value">'.(exists $dubs{0}->{count} ? &addCommas($dubs{0}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{0}->{count}).' %)' : 0).'</td><td class="info-table-value">'.($dubs{0}->{max}||0).'</td></tr><tr><td class="info-table-type">Exact duplicates with reverse complements:</td><td class="info-table-value">'.(exists $dubs{3}->{count} ? &addCommas($dubs{3}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{3}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{3}->{max}||0).'</td></tr>'; + unless($exactonly) { + $html .= '<tr><td class="info-table-type">5\' duplicates</td><td class="info-table-value">'.(exists $dubs{1}->{count} ? &addCommas($dubs{1}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{1}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{1}->{max}||0).'</td></tr><tr><td class="info-table-type">3\' duplicates</td><td class="info-table-value">'.(exists $dubs{2}->{count} ? &addCommas($dubs{2}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{2}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{2}->{max}||0).'</td></tr><tr><td class="info-table-type">5\'/3\' duplicates with reverse complements</td><td class="info-table-value">'.(exists $dubs{4}->{count} ? &addCommas($dubs{4}->{count}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{4}->{count}).' %)' : 0).'</td> <td class="info-table-value">'.($dubs{4}->{max}||0).'</td></tr>'; + } + $html .= '<tr><td class="info-table-type">Total:</td><td class="info-table-value">'.(exists $dubs{all} ? &addCommas($dubs{all}).' ('.sprintf("%.2f",100/$data->{numseqs}*$dubs{all}).' %)' : 0).'</td><td class="info-table-value">-</td></tr></tbody></table>'; + } + if(exists $dubs{all} && $dubs{all}) { + if(exists $data->{dubslength} && keys %{$data->{dubslength}}) { + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubslength},5,1),'Sequence duplication level','Read Length in bp','Number of duplicates','',0,' bp'); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br />'.&insert_image($png); + } + if(exists $data->{dubscounts} && keys %{$data->{dubscounts}}) { + $surface = &createStackBarPlot(&convertOdToStackBinMatrix($data->{dubscounts},5,1,100),'Sequence duplication level','Number of duplicates','Number of sequences','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{dubslength}); + $html .= &insert_image($png); + my %dubsmax; + my $count = 1; + foreach my $n (sort {$b <=> $a} keys %{$data->{dubscounts}}) { + foreach my $s (keys %{$data->{dubscounts}->{$n}}) { + foreach my $i (1..$data->{dubscounts}->{$n}->{$s}) { + $dubsmax{$count++}->{$s} = $n; + last unless($count <= 100); + } + last unless($count <= 100); + } + last unless($count <= 100); + } + $surface = &createStackBarPlot(&convertOdToStackBinMatrix(\%dubsmax,5,1,100),'Sequence duplication level','Sequence','Number of duplicates','',0); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{dubslength}); + $html .= &insert_image($png); + } + } + if(exists $data->{dubslength} || exists $data->{dubscounts}) { + $html .= '</div><hr>'; + } + + #Sequence complexity + if(exists $data->{compldust} || exists $data->{complentropy}) { + $html .= '<div class="info-header"><span class="info-header-title">Sequence Complexity</span></div>'; + if(exists $data->{complvals}) { + my $complseq; + foreach my $d (keys %{$data->{complvals}}) { + foreach my $m ('minseq','maxseq') { + $complseq = $data->{complvals}->{$d}->{$m}; + $complseq = substr($complseq,0,797).'...' if(length($complseq) > 800); + $complseq =~ s/(.{60})/$1\<br \/\>/g; + $data->{complvals}->{$d}->{$m} = $complseq; + } + } + } + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">Value</td><td class="info-table-value">Sequence</td></tr><tr><td class="info-table-type">Minimum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{minval} ? $data->{complvals}->{dust}->{minval} : '-').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{minseq} ? $data->{complvals}->{dust}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum DUST score:</td><td class="info-table-value">'.(exists $data->{complvals}->{dust}->{maxval} ? $data->{complvals}->{dust}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{dust}->{maxseq} ? $data->{complvals}->{dust}->{maxseq} : '').'</td></tr><tr><td class="info-table-type">Minimum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{minval} ? $data->{complvals}->{entropy}->{minval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{minseq} ? $data->{complvals}->{entropy}->{minseq} : '').'</td></tr><tr><td class="info-table-type">Maximum Entropy value:</td><td class="info-table-value">'.(exists $data->{complvals}->{entropy}->{maxval} ? $data->{complvals}->{entropy}->{maxval} : '').'</td><td class="info-table-value sequencetext">'.(exists $data->{complvals}->{entropy}->{maxseq} ? $data->{complvals}->{entropy}->{maxseq} : '').'</td></tr> </tbody></table><br />'; + } + if(exists $data->{compldust}) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{compldust},0),undef,'Sequence complexity distribution','Mean sequence complexity (DUST scores)','Number of sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + } + if(exists $data->{complentropy}) { + $surface = &createAnnotBarPlot(&convertOdToBinMatrix($data->{complentropy},0),undef,'Sequence complexity distribution','Mean sequence complexity (Entropy values)','Number of sequences','',1); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />' if(exists $data->{compldust}); + $html .= &insert_image($png); + } + if(exists $data->{compldust} || exists $data->{complentropy}) { + $html .= '</div><hr>'; + } + + #Dinucleotide odd ratio PCA - microbial/viral + if(exists $data->{dinucodds} && keys %{$data->{dinucodds}}) { + $html .= '<div class="info-header"><span class="info-header-title">Dinucleotide Odds Ratios</span></div>'; + $html .= '<div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"> </td>'; + foreach my $d (map {join("/",(m/../g ))} sort keys %{$data->{dinucodds}}) { + $html .= '<td class="info-table-value">'.$d.'</td>'; + } + $html .= '</tr><tr><td class="info-table-type">Odds ratio</td>'; + foreach my $d (map {sprintf("%.4f",$data->{dinucodds}->{$_})} sort keys %{$data->{dinucodds}}) { + $html .= '<td class="info-table-value">'.$d.'</td>'; + } + $html .= '</tr></tbody></table><br />'; + my @new = map {$data->{dinucodds}->{$_}} sort keys %{$data->{dinucodds}}; + $surface = &createOddsRatioPlot($data->{dinucodds},'Odds ratios','Dinucleotide','Odds ratio',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= &insert_image($png); + $surface = &createPCAPlot(&convertToPCAValues(\@new,'m'),'PCA','1st Principal Component Score','2nd Principal Component Score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />'; + $html .= &insert_image($png); + $surface = &createPCAPlot(&convertToPCAValues(\@new,'v'),'PCA','1st Principal Component Score','2nd Principal Component Score',''); + $png = ''; + $surface->write_to_png_stream(sub { my ($closure, $data) = @_; $png .= $data; }); + $html .= '<br /><br />'; + $html .= &insert_image($png); + $html .= '</div>'; + } + + $html .= '</div>'; + $html .= &footer(); + + #write html to file + $file = &getFileName('.html'); + open(FH, ">$file") or &printError("Can't open file ".$file.": $!"); + print FH $html; + close(FH); + &printLog("Done with HTML data"); +} + +sub insert_image { + my ($data, $height, $width, $noencode) = @_; + my $content .= '<img border="0" '.($height ? 'height="'.$height.'"' : '').($width ? 'width="'.$width.'"' : '').' src="'.($noencode ? "data:image/png;base64,".$data : &inline_image($data)).'" />'."\n"; + return $content; +} + +sub inline_image { + return "data:image/png;base64,".MIME::Base64::encode_base64($_[0]); +} + +sub convertIntToString { + my $int = shift; + $int =~ s/(.{2})/chr(hex($1))/eg; + return $int; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prinseq-lite.pl Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,4850 @@ +#!/usr/bin/perl + +#=============================================================================== +# Author: Robert SCHMIEDER, Computational Science Research Center @ SDSU, CA +# +# File: prinseq-lite +# Date: 2013-03-13 +# Version: 0.20.3 lite +# +# Usage: +# prinseq-lite [options] +# +# Try 'prinseq-lite -h' for more information. +# +# Purpose: PRINSEQ will help you to preprocess your genomic or metagenomic +# sequence data in FASTA or FASTQ format. The lite version does not +# require any non-core perl modules for processing. +# +# Bugs: Please use http://sourceforge.net/tracker/?group_id=315449 +# +#=============================================================================== + +use strict; +use warnings; + +#use Data::Dumper; ### +use Getopt::Long; +use Pod::Usage; +use File::Temp qw(tempfile); #for output files +use Fcntl qw(:flock SEEK_END); #for log file +use Digest::MD5 qw(md5_hex); #for dereplication +use Cwd; +use List::Util qw(sum min max); + +$| = 1; # Do not buffer output + +my $WINDOWSIZE = 64; +my $WINDOWSTEP = 32; +my $WORDSIZE = 3; +my @WINDOWSIZEARRAY = (0..61); +my $LOG62 = log(62); +my $ONEOVERLOG62 = 1/log(62); +my $POINTFIVE = 1/2; +my $LINE_WIDTH = 60; +my $TRIM_QUAL_WINDOW = 1; +my $TRIM_QUAL_STEP = 1; +my $TRIM_QUAL_TYPE = 'min'; +my $TRIM_QUAL_RULE = 'lt'; +my $TAG_LENGTH = 20; +my %MIDS = (ACGAGTGCGT => 0, + ACGCTCGACA => 0, + AGACGCACTC => 0, + AGCACTGTAG => 0, + ATCAGACACG => 0, + ATATCGCGAG => 0, + CGTGTCTCTA => 0, + CTCGCGTGTC => 0, + TAGTATCAGC => 0, + TCTCTATGCG => 0, + TGATACGTCT => 0, + TACTGAGCTA => 0, + CATAGTAGTG => 0, + CGAGAGATAC => 0, + ACACGACGACT => 0, + ACACGTAGTAT => 0, + ACACTACTCGT => 0, + ACGACACGTAT => 0, + ACGAGTAGACT => 0, + ACGCGTCTAGT => 0, + ACGTACACACT => 0, + ACGTACTGTGT => 0, + ACGTAGATCGT => 0, + ACTACGTCTCT => 0, + ACTATACGAGT => 0, + ACTCGCGTCGT => 0); +my $MIDCHECKLENGTH = 15; #maximum MID length plus possible key length (by default 4 bp for 454) +my %DN_DI = ('AA' => 0, 'AC' => 0, 'AG' => 0, 'AT' => 0, 'CA' => 0, 'CC' => 0, 'CG' => 0, 'CT' => 0, 'GA' => 0, 'GC' => 0, 'GG' => 0, 'GT' => 0, 'TA' => 0, 'TC' => 0, 'TG' => 0, 'TT' => 0); +my %GRAPH_OPTIONS = map {$_ => 1} qw(ld gc qd ns pt ts aq de da sc dn); +my $VERSION = '0.20.3'; +my $WHAT = 'lite'; + +my $man = 0; +my $help = 0; +my %params = ('help' => \$help, 'h' => \$help, 'man' => \$man); +GetOptions( \%params, + 'help|h', + 'man', + 'verbose', + 'version' => sub { print "PRINSEQ-$WHAT $VERSION\n"; exit; }, + 'fastq=s', + 'fasta=s', + 'fastq2=s', + 'fasta2=s', + 'qual=s', + 'min_len=i', + 'max_len=i', + 'range_len=s', + 'min_gc=i', + 'max_gc=i', + 'range_gc=s', + 'min_qual_score=i', + 'max_qual_score=i', + 'min_qual_mean=i', + 'max_qual_mean=i', + 'ns_max_p=i', + 'ns_max_n=i', + 'noniupac', + 'seq_num=i', + 'derep=i', + 'derep_min=i', + 'lc_method=s', + 'lc_threshold=i', + 'trim_to_len=i', + 'trim_left=i', + 'trim_right=i', + 'trim_left_p=i', + 'trim_right_p=i', + 'trim_tail_left=i', + 'trim_tail_right=i', + 'trim_ns_left=i', + 'trim_ns_right=i', + 'trim_qual_left=i', + 'trim_qual_right=i', + 'trim_qual_type=s', + 'trim_qual_rule=s', + 'trim_qual_window=i', + 'trim_qual_step=i', + 'seq_case=s', + 'dna_rna=s', + 'line_width=i', + 'rm_header', + 'seq_id=s', + 'seq_id_mappings:s', + 'out_format=i', + 'out_good=s', + 'out_bad=s', + 'stats_len', + 'stats_dinuc', + 'stats_info', + 'stats_tag', + 'stats_dupl', + 'stats_ns', + 'stats_assembly', + 'stats_all', + 'aa', + 'log:s', + 'graph_data:s', + 'graph_stats=s', + 'phred64', + 'qual_noscale', + 'no_qual_header', + 'exact_only', + 'web:s', + 'filename1=s', + 'filename2=s', + 'custom_params=s', + 'params=s' + ) or pod2usage(2); +pod2usage(1) if $help; +pod2usage(-exitstatus => 0, -verbose => 2) if $man; + +=head1 NAME + +PRINSEQ - PReprocessing and INformation of SEQuence data + +=head1 VERSION + +PRINSEQ-lite 0.20.3 + +=head1 SYNOPSIS + +perl prinseq-lite.pl [-h] [-help] [-version] [-man] [-verbose] [-fastq input_fastq_file] [-fasta input_fasta_file] [-fastq2 input_fastq_file_2] [-fasta2 input_fasta_file_2] [-qual input_quality_file] [-min_len int_value] [-max_len int_value] [-range_len ranges] [-min_gc int_value] [-max_gc int_value] [-range_gc ranges] [-min_qual_score int_value] [-max_qual_score int_value] [-min_qual_mean int_value] [-max_qual_mean int_value] [-ns_max_p int_value] [-ns_max_n int_value] [-noniupac] [-seq_num int_value] [-derep int_value] [-derep_min int_value] [-lc_method method_name] [-lc_threshold int_value] [-trim_to_len int_value] [-trim_left int_value] [-trim_right int_value] [-trim_left_p int_value] [-trim_right_p int_value] [-trim_ns_left int_value] [-trim_ns_right int_value] [-trim_tail_left int_value] [-trim_tail_right int_value] [-trim_qual_left int_value] [-trim_qual_right int_value] [-trim_qual_type type] [-trim_qual_rule rule] [-trim_qual_window int_value] [-trim_qual_step int_value] [-seq_case case] [-dna_rna type] [-line_width int_value] [-rm_header] [-seq_id id_string] [-out_format int_value] [-out_good filename_prefix] [-out_bad filename_prefix] [-phred64] [-stats_info] [-stats_len] [-stats_dinuc] [-stats_tag] [-stats_dupl] [-stats_ns] [-stats_assembly] [-stats_all] [-aa] [-graph_data file] [-graph_stats string] [-qual_noscale] [-no_qual_header] [-exact_only] [-log file] [-custom_params string] [-params file] [-seq_id_mappings file] + +=head1 DESCRIPTION + +PRINSEQ will help you to preprocess your genomic or metagenomic sequence data in FASTA (and QUAL) or FASTQ format. The lite version does not require any non-core perl modules for processing. + +=head1 OPTIONS + +=over 8 + +=item B<-help> | B<-h> + +Print the help message; ignore other arguments. + +=item B<-man> + +Print the full documentation; ignore other arguments. + +=item B<-version> + +Print program version; ignore other arguments. + +=item B<-verbose> + +Prints status and info messages during processing. + +=item B<***** INPUT OPTIONS *****> + +=item B<-fastq> <file> + +Input file in FASTQ format that contains the sequence and quality data. Use stdin instead of a file name to read from STDIN (-fasta stdin). This can be useful to process compressed files using Unix pipes. + +=item B<-fasta> <file> + +Input file in FASTA format that contains the sequence data. Use stdin instead of a file name to read from STDIN (-fastq stdin). This can be useful to process compressed files using Unix pipes. + +=item B<-qual> <file> + +Input file in QUAL format that contains the quality data. + +=item B<-fastq2> <file> + +For paired-end data only. Input file in FASTQ format that contains the sequence and quality data. The sequence identifiers for two matching paired-end sequences in separate files can be marked by /1 and /2, or _L and _R, or _left and _right, or must have the exact same identifier in both input files. The input sequences must be sorted by their sequence identifiers. Singletons are allowed in the input files. + +=item B<-fasta2> <file> + +For paired-end data only. Input file in FASTA format that contains the sequence data. The sequence identifiers for two matching paired-end sequences in separate files can be marked by /1 and /2, or _L and _R, or _left and _right, or must have the exact same identifier in both input files. The input sequences must be sorted by their sequence identifiers. Singletons are allowed in the input files. + +=item B<-params> <file> + +Input file in text format that contains PRINSEQ parameters. Each parameter should be specified on a new line and arguments should be separated by spaces or tabs. Comments can be specified on lines starting with the # sign. Can be combined with command line parameters. Parameters specified on the command line will overwrite the arguments in the file (if any). + +=item B<-si13> + +This option was replaced by option -phred64. + +=item B<-phred64> + +Quality data in FASTQ file is in Phred+64 format (http://en.wikipedia.org/wiki/FASTQ_format#Encoding). Not required for Illumina 1.8+, Sanger, Roche/454, Ion Torrent, PacBio data. + +=item B<-aa> + +Input is amino acid (protein) sequences instead of nucleic acid (DNA or RNA) sequences. Allowed amino acid characters: ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*- and allowed nucleic acid characters: ACGTURYKMSWBDHVNXacgturykmswbdhvnx- + +The following options are ignored for -aa: stats_dinuc,stats_tag,stats_ns,dna_rna + +=item B<***** OUTPUT OPTIONS *****> + +=item B<-out_format> <integer> + +To change the output format, use one of the following options. If not defined, the output format will be the same as the input format. + +1 (FASTA only), 2 (FASTA and QUAL), 3 (FASTQ), 4 (FASTQ and FASTA), or 5 (FASTQ, FASTA and QUAL) + +=item B<-out_good> <string> + +By default, the output files are created in the same directory as the input file containing the sequence data with an additional "_prinseq_good_XXXX" in their name (where XXXX is replaced by random characters to prevent overwriting previous files). To change the output filename and location, specify the filename using this option. The file extension will be added automatically (either .fasta, .qual, or .fastq). For paired-end data, filenames contain additionally "_1", "_1_singletons", "_2", and "_2_singletons" before the file extension. Use "-out_good null" to prevent the program from generating the output file(s) for data passing all filters. Use "-out_good stdout" to write data passing all filters to STDOUT (only for FASTA or FASTQ output files). + +Example: use "file_passed" to generate the output file file_passed.fasta in the current directory + +=item B<-out_bad> <string> + +By default, the output files are created in the same directory as the input file containing the sequence data with an additional "_prinseq_bad_XXXX" in their name (where XXXX is replaced by random characters to prevent overwriting previous files). To change the output filename and location, specify the filename using this option. The file extension will be added automatically (either .fasta, .qual, or .fastq). For paired-end data, filenames contain additionally "_1" and "_2" before the file extension. Use "-out_bad null" to prevent the program from generating the output file(s) for data not passing any filter. Use "-out_bad stdout" to write data not passing any filter to STDOUT (only for FASTA or FASTQ output files). + +Example: use "file_filtered" to generate the output file file_filtered.fasta in the current directory + +Example: "-out_good stdout -out_bad null" will write data passing filters to STDOUT and data not passing any filter will be ignored + +=item B<-log> <file> + +Log file to keep track of parameters, errors, etc. The log file name is optional. If no file name is given, the log file name will be "inputname.log". If the log file already exists, new content will be added to the file. + +=item B<-graph_data> <file> + +File that contains the necessary information to generate the graphs similar to the ones in the web version. The file name is optional. If no file name is given, the file name will be "inputname.gd". If the file already exists, new content will overwrite the file. Use "-out_good null -out_bad null" to prevent generating any additional outputs. (See below for more options related to the graph data.) + +The graph data can be used as input for the prinseq-graphs.pl file to generate the PNG graph files or an HTML report file. If you have trouble installing the required prinseq-graphs.pl modules or want to see an output +example report, upload the graph data file at: http://edwards.sdsu.edu/prinseq/ -> Choose "Get Report" + +=item B<-graph_stats> <string> + +Use this option to select what statistics should be calculated and included in the graph_data file. This is useful if you e.g. do not need sequence complexity information, which requires a lot of computation. Requires to have graph_data specified. Default is all selected. + +Allowed option are (separate multiple by comma with no spaces): ld (Length distribution), gc (GC content distribution), qd (Base quality distribution), ns (Occurence of N), pt (Poly-A/T tails), ts (Tag sequence check), aq (Assembly quality measure), de (Sequence duplication - exact only), da (Sequence duplication - exact + 5'/3'), sc (Sequence complexity), dn (Dinucleotide odds ratios, includes the PCA plots) + +Example use: -graph_stats ld,gc,qd,de + +=item B<-qual_noscale> + +Use this option if all your sequences are shorter than 100bp as they do not require to scale quality data to 100 data points in the graph. By default, quality scores of sequences shorter than 100bp or longer than 100bp are fit to 100 data points. (To retrieve this information and calculate the graph data would otherwise require to parse the data two times or store all the quality data in memory.) + +=item B<-no_qual_header> + +In order to reduce the file size, this option will generate an empty header line for the quality data in FASTQ files. Instead of +header, only the + sign will be output. The header of the sequence data will be left unchanged. This option applies to FASTQ output files only. + +=item B<-exact_only> + +Use this option to check for exact (forward and reverse) duplicates only when generating the graph data. This allows to keep the memory requirements low for large input files and is faster. This option will automatically be applied when using -derep options 1 and/or 4 only. Specify option -derep 1 or -derep 4 if you do not want to apply both at the same time. + +=item B<-seq_id_mappings> <file> + +Text file containing the old and new (specified with -seq_id) identifiers for later reference. This option is useful if e.g. a renamed sequence has to be identified based on the new sequence identifier. The file name is optional. If no file name is given, the file name will be "inputname_prinseq_good.ids" (only good sequences are renamed). If a file with the same name already exists, new content will overwrite the old file. The text file contains one sequence identifier pair per line, separated by tabs (old-tab-new). Requires option -seq_id. + + +=item B<***** FILTER OPTIONS *****> + +=item B<-min_len> <integer> + +Filter sequence shorter than min_len. + +=item B<-max_len> <integer> + +Filter sequence longer than max_len. + +=item B<-range_len> <string> + +Filter sequence by length range. Multiple range values should be separated by comma without spaces. + +Example: -range_len 50-100,250-300 + +=item B<-min_gc> <integer> + +Filter sequence with GC content below min_gc. + +=item B<-max_gc> <integer> + +Filter sequence with GC content above max_gc. + +=item B<-range_gc> <string> + +Filter sequence by GC content range. Multiple range values should be separated by comma without spaces. + +Example: -range_gc 50-60,75-90 + +=item B<-min_qual_score> <integer> + +Filter sequence with at least one quality score below min_qual_score. + +=item B<-max_qual_score> <integer> + +Filter sequence with at least one quality score above max_qual_score. + +=item B<-min_qual_mean> <integer> + +Filter sequence with quality score mean below min_qual_mean. + +=item B<-max_qual_mean> <integer> + +Filter sequence with quality score mean above max_qual_mean. + +=item B<-ns_max_p> <integer> + +Filter sequence with more than ns_max_p percentage of Ns. + +=item B<-ns_max_n> <integer> + +Filter sequence with more than ns_max_n Ns. + +=item B<-noniupac> + +Filter sequence with characters other than A, C, G, T or N. + +=item B<-seq_num> <integer> + +Only keep the first seq_num number of sequences (that pass all other filters). + +=item B<-derep> <integer> + +Type of duplicates to filter. Allowed values are 1, 2, 3, 4 and 5. Use integers for multiple selections (e.g. 124 to use type 1, 2 and 4). The order does not matter. Option 2 and 3 will set 1 and option 5 will set 4 as these are subsets of the other option. + +1 (exact duplicate), 2 (5' duplicate), 3 (3' duplicate), 4 (reverse complement exact duplicate), 5 (reverse complement 5'/3' duplicate) + +=item B<-derep_min> <integer> + +This option specifies the number of allowed duplicates. If you want to remove sequence duplicates that occur more than x times, then you would specify x+1 as the -derep_min values. For examples, to remove sequences that occur more than 5 times, you would specify -derep_min 6. This option can only be used in combination with -derep 1 and/or 4 (forward and/or reverse exact duplicates). [default : 2] + +=item B<-lc_method> <string> + +Method to filter low complexity sequences. The current options are "dust" and "entropy". Use "-lc_method dust" to calculate the complexity using the dust method. + +=item B<-lc_threshold> <integer> + +The threshold value (between 0 and 100) used to filter sequences by sequence complexity. The dust method uses this as maximum allowed score and the entropy method as minimum allowed value. + +=item B<-custom_params> <string> + +Can be used to specify additional filters. The current set of possible rules is limited and has to follow the specifications below. The custom parameters have to be specified within quotes (either ' or "). + +Please separate parameter values with a space and separate new parameter sets with semicolon (;). Parameters are defined by two values: + (1) the pattern (any combination of the letters "ACGTN"), + (2) the number of repeats or percentage of occurence +Percentage values are defined by a number followed by the %-sign (without space). +If no %-sign is given, it is assumed that the given number specifies the number of repeats of the pattern. + +Examples: "AAT 10" (filters out sequences containing AATAATAATAATAATAATAATAATAATAAT anywhere in the sequence), "T 70%" (filters out sequences with more than 70% Ts in the sequence), "A 15" (filters out sequences containing AAAAAAAAAAAAAAA anywhere in the sequence), "AAT 10;T 70%;A 15" (apply all three filters) + +=item B<***** TRIM OPTIONS *****> + +=item B<-trim_to_len> <integer> + +Trim all sequence from the 3'-end to result in sequence with this length. + +=item B<-trim_left> <integer> + +Trim sequence at the 5'-end by trim_left positions. + +=item B<-trim_right> <integer> + +Trim sequence at the 3'-end by trim_right positions. + +=item B<-trim_left_p> <integer> + +Trim sequence at the 5'-end by trim_left_p percentage of read length. The trim length is rounded towards the lower integer (e.g. 143.6 is rounded to 143 positions). Use an integer between 1 and 100 for the percentage value. + +=item B<-trim_right_p> <integer> + +Trim sequence at the 3'-end by trim_right_p percentage of read length. The trim length is rounded towards the lower integer (e.g. 143.6 is rounded to 143 positions). Use an integer between 1 and 100 for the percentage value. + +=item B<-trim_tail_left> <integer> + +Trim poly-A/T tail with a minimum length of trim_tail_left at the 5'-end. + +=item B<-trim_tail_right> <integer> + +Trim poly-A/T tail with a minimum length of trim_tail_right at the 3'-end. + +=item B<-trim_ns_left> <integer> + +Trim poly-N tail with a minimum length of trim_ns_left at the 5'-end. + +=item B<-trim_ns_right> <integer> + +Trim poly-N tail with a minimum length of trim_ns_right at the 3'-end. + +=item B<-trim_qual_left> <integer> + +Trim sequence by quality score from the 5'-end with this threshold score. + +=item B<-trim_qual_right> <integer> + +Trim sequence by quality score from the 3'-end with this threshold score. + +=item B<-trim_qual_type> <string> + +Type of quality score calculation to use. Allowed options are min, mean, max and sum. [default: min] + +=item B<-trim_qual_rule> <string> + +Rule to use to compare quality score to calculated value. Allowed options are lt (less than), gt (greater than) and et (equal to). [default: lt] + +=item B<-trim_qual_window> <integer> + +The sliding window size used to calculate quality score by type. To stop at the first base that fails the rule defined, use a window size of 1. [default: 1] + +=item B<-trim_qual_step> <integer> + +Step size used to move the sliding window. To move the window over all quality scores without missing any, the step size should be less or equal to the window size. [default: 1] + +=item B<***** REFORMAT OPTIONS *****> + +=item B<-seq_case> <string> + +Changes sequence character case to upper or lower case. Allowed options are "upper" and "lower". Use this option to remove soft-masking from your sequences. + +=item B<-dna_rna> <string> + +Convert sequence between DNA and RNA. Allowed options are "dna" (convert from RNA to DNA) and "rna" (convert from DNA to RNA). + +=item B<-line_width> <integer> + +Sequence characters per line. Use 0 if you want each sequence in a single line. Use 80 for line breaks every 80 characters. Note that this option only applies to FASTA output files, since FASTQ files store sequences without additional line breaks. [default: 60] + +=item B<-rm_header> + +Remove the sequence header. This includes everything after the sequence identifier (which is kept unchanged). + +=item B<-seq_id> <string> + +Rename the sequence identifier. A counter is added to each identifier to assure its uniqueness. Use option -seq_id_mappings to generate a file containing the old and new identifiers for later reference. + +Example: "mySeq_10" will generate the IDs (in FASTA format) >mySeq_101, >mySeq_102, >mySeq_103, ... + +=item B<***** SUMMARY STATISTIC OPTIONS *****> + +The summary statistic values are written to STDOUT in the form: "parameter_name statistic_name value" (without the quotes). For example, "stats_info reads 10000" or "stats_len max 500". Only one statistic is written per line and values are separated by tabs. + +If you specify any statistic option, no other ouput will be generated. To preprocess data, do not specify a statistics option. + +=item B<-stats_info> + +Outputs basic information such as number of reads (reads) and total bases (bases). + +=item B<-stats_len> + +Outputs minimum (min), maximum (max), range (range), mean (mean), standard deviation (stddev), mode (mode) and mode value (modeval), and median (median) for read length. + +=item B<-stats_dinuc> + +Outputs the dinucleotide odds ratio for AA/TT (aatt), AC/GT (acgt), AG/CT (agct), AT (at), CA/TG (catg), CC/GG (ccgg), CG (cg), GA/TC (gatc), GC (gc) and TA (ta). + +=item B<-stats_tag> + +Outputs the probability of a tag sequence at the 5'-end (prob5) and 3'-end (prob3) in percentage (0..100). Provides the number of predefined MIDs (midnum) and the MID sequences (midseq, separated by comma, only provided if midnum > 0) that occur in more than 34/100 (approx. 3%) of the reads. + +=item B<-stats_dupl> + +Outputs the number of exact duplicates (exact), 5' duplicates (5), 3' duplicates (3), exact duplicates with reverse complements (exactrevcom) and 5'/3' duplicates with reverse complements (revcomp), and total number of duplicates (total). The maximum number of duplicates is given under the value name with an additional "maxd" (e.g. exactmaxd or 5maxd). + +=item B<-stats_ns> + +Outputs the number of reads with ambiguous base N (seqswithn), the maximum number of Ns per read (maxn) and the maximum percentage of Ns per read (maxp). The maxn and maxp value are not necessary from the same sequence. + +=item B<-stats_assembly> + +Outputs the N50, N90, etc contig sizes. The Nxx contig size is a weighted median that is defined as the length of the smallest contig C in the sorted list of all contigs where the cumulative length from the largest contig to contig C is at least xx% of the total length (sum of contig lengths). + +=item B<-stats_all> + +Outputs all available summary statistics. + +=item B<***** ORDER OF PROCESSING *****> + +The available options are processed in the following order: + +seq_num, trim_left, trim_right, trim_left_p, trim_right_p, trim_qual_left, trim_qual_right, trim_tail_left, trim_tail_right, trim_ns_left, trim_ns_right, trim_to_len, min_len, max_len, range_len, min_qual_score, max_qual_score, min_qual_mean, max_qual_mean, min_gc, max_gc, range_gc, ns_max_p, ns_max_n, noniupac, lc_method, derep, seq_id, seq_case, dna_rna, out_format + +=back + +=head1 AUTHOR + +Robert SCHMIEDER, C<< <rschmieder_at_gmail_dot_com> >> + +=head1 BUGS + +If you find a bug please email me at C<< <rschmieder_at_gmail_dot_com> >> or use http://sourceforge.net/tracker/?group_id=315449 so that I can make PRINSEQ better. + +=head1 COPYRIGHT + +Copyright (C) 2010-2012 Robert SCHMIEDER + +=head1 LICENSE + +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/>. + +=cut + +# +################################################################################ +## DATA AND PARAMETER CHECKING +################################################################################ +# + +my ($file1,$file2,$command,@dataread,$aa,%filtercount,$slashnum,$trimnum1,$trimnum2); + +#check if params file +if(exists $params{params}) { + my $ps = &readParamsFile($params{params}); + foreach my $p (keys %$ps) { + next if(exists $params{$p}); + $params{$p} = $ps->{$p}; + } +} + +#check if amino acid or nucleic acid input +if(exists $params{aa}) { + $aa = 1; + $command .= ' -aa'; +} else { + $aa = 0; +} + +#Check if input file exists and check if file format is correct +if(exists $params{fasta} && exists $params{fastq}) { + &printError('fasta and fastq cannot be used together'); +} elsif(exists $params{fasta}) { + $command .= ' -fasta '.$params{fasta}; + $file1 = $params{fasta}; + if($params{fasta} eq 'stdin') { + if(exists $params{qual} && $params{qual} eq 'stdin') { + &printError('input from STDIN is only allowed for either of the input files'); + } else { + my $format = &checkInputFormat(); + unless($format eq 'fasta') { + &printError('input data for -fasta is in '.uc($format).' format not in FASTA format'); + } + } + } elsif(-e $params{fasta}) { + #check for file format + my $format = &checkFileFormat($file1); + unless($format eq 'fasta') { + &printError('input file for -fasta is in '.uc($format).' format not in FASTA format'); + } + } else { + &printError("could not find input file \"".$params{fasta}."\""); + } +} elsif(exists $params{fastq}) { + $command .= ' -fastq '.$params{fastq}; + $file1 = $params{fastq}; + if($params{fastq} eq 'stdin') { + my $format = &checkInputFormat(); + unless($format eq 'fastq') { + &printError('input data for -fastq is in '.uc($format).' format not in FASTQ format'); + } + } elsif(-e $params{fastq}) { + #check for file format + my $format = &checkFileFormat($file1); + unless($format eq 'fastq') { + &printError('input file for -fastq is in '.uc($format).' format not in FASTQ format'); + } + } else { + &printError("could not find input file \"".$params{fastq}."\""); + } +} else { + &printError("you did not specify an input file containing the query sequences"); +} +if(exists $params{fastq} && exists $params{qual}) { + &printError('fastq and qual cannot be used together'); +} elsif(exists $params{qual}) { + $command .= ' -qual '.$params{qual}; + if($params{qual} eq 'stdin') { + &printError('QUAL data cannot be read from STDIN'); + } elsif(-e $params{qual}) { + #check for file format + my $format = &checkFileFormat($params{qual}); + unless($format eq 'qual') { + &printError('input file for -qual is in '.uc($format).' format not in QUAL format'); + } + } else { + &printError("could not find input file \"".$params{qual}."\""); + } +} +if(exists $params{fasta2} && exists $params{fastq2}) { + &printError('fasta2 and fastq2 cannot be used together'); +} elsif(exists $params{fasta2}) { + if(!exists $params{fasta}) { + &printError('option fasta2 requires option fasta'); + } elsif($params{fasta} eq $params{fasta2}) { + &printError('option fasta and fasta2 cannot be the same input file'); + } else { + $command .= ' -fasta2 '.$params{fasta2}; + $file2 = $params{fasta2}; + if($params{fasta} eq 'stdin' || $params{fasta2} eq 'stdin') { + &printError('paired-end data cannot be processed from STDIN'); + } elsif(-e $params{fasta2}) { + #check for file format + my $format = &checkFileFormat($file2); + unless($format eq 'fasta') { + &printError('input file for -fasta2 is in '.uc($format).' format not in FASTA format'); + } + } else { + &printError("could not find input file \"".$params{fasta2}."\""); + } + } + ($slashnum,$trimnum1,$trimnum2) = &checkSlashnum($file2); +} elsif(exists $params{fastq2}) { + if(!exists $params{fastq}) { + &printError('option fastq2 requires option fastq'); + } elsif($params{fastq} eq $params{fastq2}) { + &printError('option fastq and fastq2 cannot be the same input file'); + } else { + $command .= ' -fastq2 '.$params{fastq2}; + $file2 = $params{fastq2}; + if($params{fastq} eq 'stdin' || $params{fastq2} eq 'stdin') { + &printError('paired-end data cannot be processed from STDIN'); + } elsif(-e $params{fastq2}) { + #check for file format + my $format = &checkFileFormat($file2); + unless($format eq 'fastq') { + &printError('input file for -fastq2 is in '.uc($format).' format not in FASTQ format'); + } + } else { + &printError("could not find input file \"".$params{fastq2}."\""); + } + } + ($slashnum,$trimnum1,$trimnum2) = &checkSlashnum($file2); +} + + +#check if stats_all +if(exists $params{stats_all}) { + $params{stats_info} = 1; + $params{stats_len} = 1; + $params{stats_dupl} = 1 unless($file2); + $params{stats_dinuc} = 1; + $params{stats_tag} = 1; + $params{stats_ns} = 1; + $params{stats_assembly} = 1; + delete($params{stats_all}); +} +if($aa) { + delete($params{stats_dinuc}); + delete($params{stats_tag}); + delete($params{stats_ns}); +} +if($file2) { + delete($params{stats_dupl}); + delete($params{stats_assembly}); +} + +#check if anything todo +unless( exists $params{min_len} || + exists $params{max_len} || + exists $params{range_len} || + exists $params{min_gc} || + exists $params{max_gc} || + exists $params{range_gc} || + exists $params{min_qual_score} || + exists $params{max_qual_score} || + exists $params{min_qual_mean} || + exists $params{max_qual_mean} || + exists $params{ns_max_p} || + exists $params{ns_max_n} || + exists $params{noniupac} || + exists $params{seq_num} || + exists $params{derep} || + exists $params{lc_method} || + exists $params{lc_threshold} || + exists $params{trim_to_len} || + exists $params{trim_left} || + exists $params{trim_right} || + exists $params{trim_left_p} || + exists $params{trim_right_p} || + exists $params{trim_tail_left} || + exists $params{trim_tail_right} || + exists $params{trim_ns_left} || + exists $params{trim_ns_right} || + exists $params{trim_qual_left} || + exists $params{trim_qual_right} || + exists $params{trim_qual_type} || + exists $params{trim_qual_rule} || + exists $params{trim_qual_window} || + exists $params{trim_qual_step} || + exists $params{seq_case} || + exists $params{dna_rna} || + exists $params{exact_only} || + exists $params{line_width} || + exists $params{rm_header} || + exists $params{seq_id} || + exists $params{out_format} || + exists $params{stats_info} || + exists $params{stats_len} || + exists $params{stats_dinuc} || + exists $params{stats_tag} || + exists $params{stats_dupl} || + exists $params{stats_ns} || + exists $params{stats_assembly} || + exists $params{phred64} || + exists $params{no_qual_header} || + exists $params{graph_data} || + exists $params{custom_params} + ) { + &printError('nothing to do with input data'); +} +#prevent out of files for stats +if(exists $params{stats_info} || exists $params{stats_len} || exists $params{stats_dinuc} || exists $params{stats_tag} || exists $params{stats_dupl} || exists $params{stats_ns} || exists $params{stats_assembly}) { + $params{out_good} = 'null'; + $params{out_bad} = 'null'; + $params{stats} = 1; +} elsif(exists $params{out_good} && $params{out_good} eq 'null' && exists $params{out_bad} && $params{out_bad} eq 'null' && !exists $params{graph_data}) { + &printError('no output selected (both set to null)'); +} + +#check if FASTQ file is given for option phred64 +if(exists $params{phred64}) { + $command .= ' -phred64'; + unless(exists $params{fastq}) { + &printError('option -phred64 can only be used for FASTQ input files'); + } +} + +#check if output format is possible +if(exists $params{out_format}) { + $command .= ' -out_format '.$params{out_format}; + if($params{out_format} =~ /\D/) { + &printError('output format option has to be an integer value'); + } elsif($params{out_format} == 2 || $params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5) { + unless(exists $params{fastq} || exists $params{qual}) { + &printError('cannot use this output format option without providing quality data as input'); + } + if(exists $params{fastq2} && ($params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5)) { + &printError('cannot use this output format option for paired-end input data. Only values 1 and 3 are allowed'); + } + } elsif($params{out_format} != 1) { + &printError('output format option not available'); + } +} else { + if(exists $params{fastq}) { + $params{out_format} = 3; + } elsif(exists $params{fasta} && exists $params{qual}) { + $params{out_format} = 2; + } else { + $params{out_format} = 1; + } +} +if(exists $params{no_qual_header} && $params{out_format} != 3) { + &printError('the option -no_qual_header can only be used for FASTQ outputs'); +} + +#check if output names are different +if(exists $params{out_good} && exists $params{out_bad} && $params{out_good} eq $params{out_bad} && $params{out_good} ne 'null' && $params{out_good} ne 'stdout') { + &printError('the output names for -out_good and -out_bad have to be different'); +} +#check if output can be written to standard output +if(($params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5) && ((exists $params{out_good} && $params{out_good} eq 'stdout') || (exists $params{out_bad} && $params{out_bad} eq 'stdout'))) { + &printError('the output cannot be written to STDOUT for multiple output files. This option can only be used for FASTA only (-out_format 1) or FASTQ output (-out_format 3)'); +} + +#check dereplication option +#1 - exact dub, 2 - prefix, 3 - suffix, 4 - revcomp exact, 5 - revcomp prefix/suffix +my $derep = 0; +my %dereptypes; +my $derepmin = 2; +if(exists $params{derep}) { + $command .= ' -derep '.$params{derep}; + if($params{derep} < 0 || $params{derep} > 54321) { + &printError('invalid option for dereplication'); + } else { + my @tmp = split('',$params{derep}); + foreach(@tmp) { + if($_ < 1 || $_ > 5) { + &printError('invalid option '.$_.'for dereplication'); + } else { + $derep = 1; + $dereptypes{($_-1)} = 0; + } + } + } +} +if(!exists $dereptypes{0} && (exists $dereptypes{1} || exists $dereptypes{2})) { + $dereptypes{0} = 0; +} +if(!exists $dereptypes{3} && exists $dereptypes{4}) { + $dereptypes{3} = 0; +} +my $exactonly = 0; +if(exists $params{exact_only}) { + $command .= ' -exact_only'; + if(exists $dereptypes{1} || exists $dereptypes{2} || exists $dereptypes{4}) { + &printError('option -exact_only can only be used with -derep options 1 and/or 4'); + } + if(!exists $params{graph_data}) { + &printError('option -exact_only requires option -graph_data'); + } + if(!exists $params{derep}) { + $dereptypes{0} = 1; + $dereptypes{3} = 1; + } + $exactonly = 1; +} elsif((exists $dereptypes{0} || exists $dereptypes{3}) && !exists $dereptypes{1} && !exists $dereptypes{2} && !exists $dereptypes{4}) { + $command .= ' -exact_only'; + $exactonly = 1; + $params{exact_only} = 1; +} +if(exists $params{derep_min}) { + $command .= ' -derep_min '.$params{derep_min}; + if($params{derep_min} < 2) { + &printError('invalid option '.$params{derep_min}.'for derep_min. The values has to be greater than 1'); + } elsif(exists $dereptypes{1} || exists $dereptypes{2} || exists $dereptypes{4}) { + &printError('option -derep_min can only be used with -derep options 1 and/or 4'); + } else { + $derepmin = $params{derep_min}; + } +} + +#check for low complexity method +my $complval; +if(exists $params{lc_method}) { + $command .= ' -lc_method '.$params{lc_method}; + unless($params{lc_method} eq 'dust' || $params{lc_method} eq 'entropy') { + &printError('invalid low complexity method'); + } + unless(exists $params{lc_threshold}) { + &printError('the low complexity method requires a threshold value specified by -lc_threshold'); + } + $command .= ' -lc_threshold '.$params{lc_threshold}; + $complval = $params{lc_threshold}; +} +if(exists $params{lc_threshold} && !exists $params{lc_method}) { + &printError('the low complexity threshold requires a method specified by -lc_method'); +} + +#check for quality trimming +my $trimscore; +if(exists $params{trim_qual_left} || exists $params{trim_qual_right}) { + $command .= ' -trim_qual_right '.$params{trim_qual_right} if(exists $params{trim_qual_right}); + $command .= ' -trim_qual_left '.$params{trim_qual_left} if(exists $params{trim_qual_left}); + if(exists $params{trim_qual_type}) { + unless($params{trim_qual_type} eq 'min' || $params{trim_qual_type} eq 'mean' || $params{trim_qual_type} eq 'max' || $params{trim_qual_type} eq 'sum') { + &printError('invalid value for trim_qual_type'); + } + } else { + $params{trim_qual_type} = $TRIM_QUAL_TYPE; + } + $command .= ' -trim_qual_type '.$params{trim_qual_type}; + if(exists $params{trim_qual_rule}) { + unless($params{trim_qual_rule} eq 'lt' || $params{trim_qual_rule} eq 'gt' || $params{trim_qual_rule} eq 'et') { + &printError('invalid value for trim_qual_rule'); + } + } else { + $params{trim_qual_rule} = $TRIM_QUAL_RULE; + } + $command .= ' -trim_qual_rule '.$params{trim_qual_rule}; + unless(exists $params{trim_qual_window}) { + $params{trim_qual_window} = $TRIM_QUAL_WINDOW; + } + $command .= ' -trim_qual_window '.$params{trim_qual_window}; + unless(exists $params{trim_qual_step}) { + $params{trim_qual_step} = $TRIM_QUAL_STEP; + } + $command .= ' -trim_qual_step '.$params{trim_qual_step}; + $trimscore = 1; +} + +#check sequence case +if(exists $params{seq_case}) { + $command .= ' -seq_case '.$params{seq_case}; + unless($params{seq_case} eq 'upper' || $params{seq_case} eq 'lower') { + &printError('invalid sequence case option'); + } +} + +#check for dna/rna +if(exists $params{dna_rna}) { + $command .= ' -dna_rna '.$params{dna_rna}; + unless($params{dna_rna} eq 'dna' || $params{dna_rna} eq 'rna') { + &printError('invalid option for -dna_rna'); + } + if($aa) { + &printError('option -dna_rna cannot be used with option -aa'); + } +} + +#set remaining parameters +my $linelen; +if($params{out_format} == 3) { + $linelen = 0; +} elsif(exists $params{line_width}) { + $linelen = $params{line_width}; + $command .= ' -line_width '.$params{line_width}; +} else { + $linelen = $LINE_WIDTH; +} + +if(exists $params{seq_id}) { + $command .= ' -seq_id '.$params{seq_id}; + #remove spaces, ">" and quotes from sequence ids + $params{seq_id} =~ s/[\s\>\"\'\`]//g; +} elsif(exists $params{seq_id_mappings}) { + &printError('option -seq_id_mappings requires option -seq_id'); +} +if(exists $params{seq_id_mappings}) { + $command .= ' -seq_id_mappings'.($params{seq_id_mappings} ? ' '.$params{seq_id_mappings} : ''); +} + +my ($repAleft,$repTleft,$repAright,$repTright,$repNleft,$repNright); +if(exists $params{trim_tail_left}) { + $command .= ' -trim_tail_left '.$params{trim_tail_left}; + $repAleft = 'A'x$params{trim_tail_left}; + $repAleft = qr/^$repAleft/; + $repTleft = 'T'x$params{trim_tail_left}; + $repTleft = qr/^$repTleft/; +} +if(exists $params{trim_tail_right}) { + $command .= ' -trim_tail_right '.$params{trim_tail_right}; + $repAright = 'A'x$params{trim_tail_right}; + $repAright = qr/$repAright$/; + $repTright = 'T'x$params{trim_tail_right}; + $repTright = qr/$repTright$/; +} +if(exists $params{trim_ns_left}) { + $command .= ' -trim_ns_left '.$params{trim_ns_left}; + $repNleft = 'N'x$params{trim_ns_left}; + $repNleft = qr/^$repNleft/; +} +if(exists $params{trim_ns_right}) { + $command .= ' -trim_ns_right '.$params{trim_ns_right}; + $repNright = 'N'x$params{trim_ns_right}; + $repNright = qr/$repNright$/; +} + +#graph data file +if(exists $params{graph_data}) { + if(exists $params{stats}) { + &printError("The graph data cannot be generated at the same time as the statistics"); + } + $command .= ' -graph_data'.($params{graph_data} ? ' '.$params{graph_data} : ''); + unless($params{graph_data}) { + $params{graph_data} = join("__",$file1||'nonamegiven').'.gd'; + } + $params{graph_data} = cwd().'/'.$params{graph_data} unless($params{graph_data} =~ /^\//); +} +my $scale = 1; +if(exists $params{qual_noscale}) { + $command .= ' -qual_noscale'; + $scale = 0; +} +#graph data selection +if(exists $params{graph_stats} && !exists $params{graph_data}) { + &printError('option -graph_stats requires option -graph_data'); +} +my %webstats = %GRAPH_OPTIONS; +my %graphstats = %GRAPH_OPTIONS; +if(exists $params{graph_stats}) { + $command .= ' -graph_stats'.($params{graph_stats} ? ' '.$params{graph_stats} : ''); + if($params{graph_stats}) { + #set all zeroto reset default selection + foreach my $s (keys %graphstats) { + $graphstats{$s} = 0; + $webstats{$s} = 0; + } + my @tmp = split(',',$params{graph_stats}); + foreach my $s (@tmp) { + if(exists $graphstats{$s}) { + $graphstats{$s} = 1; + } else { + &printError('unknown option "'.$s.'" for -graph_stats'); + } + } + } else { + &printError('please specify at least one option for -graph_stats'); + } +} +if(exists $params{graph_stats} && exists $params{web}) { + &printError('option -graph_stats cannot be used in combination with -web'); +} +#web output +my $webnoprocess = 0; +if(exists $params{web}) { + $command .= ' -web'.($params{web} ? ' '.$params{web} : ''); + if($params{web}) { + unless($params{web} eq 'process') { + $webnoprocess = 1; + foreach my $s (keys %webstats) { + $webstats{$s} = 0; + $graphstats{$s} = 0; + } + my @tmp = split(',',$params{web}); + foreach my $s (@tmp) { + $webstats{$s} = 1; + } + } + } +} +if(exists $params{graph_stats} && $graphstats{da}) { + if($exactonly) { + &printError('"-exact_only" and "-graph_stats da" cannot be specified at the same time'); + } else { + $graphstats{de} = 0; + } +} +#do not calculate all duplicates for paired-end data (at least for now) +if($file2) { + if(exists $webstats{da}) { + $webstats{da} = 0; + } + if(exists $graphstats{da}) { + $graphstats{da} = 0; + } +} +if($webstats{da}) { + $webstats{de} = 0; +} +if($graphstats{da}) { + $graphstats{de} = 0; +} +if((exists $params{graph_data} && $graphstats{de}) || (exists $params{web} && $webstats{de})) { + $exactonly = 1; +} + +#custom params +my @cps = (); +if(exists $params{custom_params}) { + $command .= ' -custom_params "'.$params{custom_params}.'"'; + my ($repeats,@tmp,$bases); + foreach my $rule (split(/\s*\;\s*/,$params{custom_params})) { + $repeats = 1; + @tmp = split(/\s+/,$rule); + next unless(scalar(@tmp) == 2); + $bases = ($tmp[0] =~ tr/ACGTN//); + next if($bases < length($tmp[0])); + if(index($tmp[1],'%') != -1) { + $tmp[1] =~ s/\%//g; + $repeats = 0; + } + next unless($tmp[1] =~ m/^\d+$/o); + push(@cps,[$repeats,$tmp[0],$tmp[1]]); + } +} + +#add remaining to log command +if(exists $params{log} || exists $params{graph_data}) { + if(exists $params{log}) { + $command .= ' -log'.($params{log} ? ' '.$params{log} : ''); + } + if(exists $params{min_len}) { + $command .= ' -min_len '.$params{min_len}; + } + if(exists $params{max_len}) { + $command .= ' -max_len '.$params{max_len}; + } + if(exists $params{range_len}) { + $command .= ' -range_len '.$params{range_len}; + } + if(exists $params{min_gc}) { + $command .= ' -min_gc '.$params{min_gc}; + } + if(exists $params{max_gc}) { + $command .= ' -max_gc '.$params{max_gc}; + } + if(exists $params{range_gc}) { + $command .= ' -range_gc '.$params{range_gc}; + } + if(exists $params{min_qual_score}) { + $command .= ' -min_qual_score '.$params{min_qual_score}; + } + if(exists $params{max_qual_score}) { + $command .= ' -max_qual_score '.$params{max_qual_score}; + } + if(exists $params{min_qual_mean}) { + $command .= ' -min_qual_mean '.$params{min_qual_mean}; + } + if(exists $params{max_qual_mean}) { + $command .= ' -max_qual_mean '.$params{max_qual_mean}; + } + if(exists $params{ns_max_p}) { + $command .= ' -ns_max_p '.$params{ns_max_p}; + } + if(exists $params{ns_max_n}) { + $command .= ' -ns_max_n '.$params{ns_max_n}; + } + if(exists $params{noniupac}) { + $command .= ' -noniupac'; + } + if(exists $params{seq_num}) { + $command .= ' -seq_num '.$params{seq_num}; + } + if(exists $params{trim_to_len}) { + $command .= ' -trim_to_len '.$params{trim_to_len}; + } + if(exists $params{trim_left}) { + $command .= ' -trim_left '.$params{trim_left}; + } + if(exists $params{trim_right}) { + $command .= ' -trim_right '.$params{trim_right}; + } + if(exists $params{trim_left_p}) { + $command .= ' -trim_left_p '.$params{trim_left_p}; + } + if(exists $params{trim_right_p}) { + $command .= ' -trim_right_p '.$params{trim_right_p}; + } + if(exists $params{rm_header}) { + $command .= ' -rm_header'; + } + if(exists $params{stats_len}) { + $command .= ' -stats_len'; + } + if(exists $params{stats_dinuc}) { + $command .= ' -stats_dinuc'; + } + if(exists $params{stats_info}) { + $command .= ' -stats_info'; + } + if(exists $params{stats_tag}) { + $command .= ' -stats_tag'; + } + if(exists $params{stats_dupl}) { + $command .= ' -stats_dupl'; + } + if(exists $params{stats_ns}) { + $command .= ' -stats_ns'; + } + if(exists $params{stats_assembly}) { + $command .= ' -stats_assembly'; + } + if(exists $params{verbose}) { + $command .= ' -verbose'; + } + if(exists $params{out_good}) { + $command .= ' -out_good '.$params{out_good}; + } + if(exists $params{out_bad}) { + $command .= ' -out_bad '.$params{out_bad}; + } + if(exists $params{no_qual_header}) { + $command .= ' -no_qual_header'; + } + + if(exists $params{log}) { + unless($params{log}) { + $params{log} = join("__",$file1||'nonamegiven').'.log'; + } + $params{log} = cwd().'/'.$params{log} unless($params{log} =~ /^\//); + if(exists $params{web}) { + &printLog("Executing PRINSEQ using params file"); + } else { + &printLog("Executing PRINSEQ with command: \"perl prinseq-".$WHAT.".pl".$command."\""); + } + } +} + +# +################################################################################ +## DATA PROCESSING +################################################################################ +# + +#order of processing: +#seq_num, trim_left, trim_right, trim_left_p, trim_right_p, trim_qual_left, trim_qual_right, trim_tail_left, trim_tail_right, trim_ns_left, trim_ns_right, trim_to_len, min_len, max_len, range_len, min_qual_score, max_qual_score, min_qual_mean, max_qual_mean, min_gc, max_gc, range_gc, ns_max_p, ns_max_n, noniupac, lc_method, derep, seq_id, seq_case, dna_rna, out_format + +my $filename = $file1; +while($filename =~ /[\w\d]+\.[\w\d]+$/) { + $filename =~ s/\.[\w\d]+$//; + last if($filename =~ /\/[^\.]+$/); +} +my $filename2; +if($file2) { + $filename2 = $file2; + while($filename2 =~ /[\w\d]+\.[\w\d]+$/) { + $filename2 =~ s/\.[\w\d]+$//; + last if($filename2 =~ /\/[^\.]+$/); + } +} + +#create filehandles for the output data +my ($fhgood,$fhgood2,$fhgood3,$fh2good,$fh2good2,$fhbad,$fhbad2,$fhbad3,$fh2bad,$fhmappings); +my ($filenamegood,$filenamegood2,$filenamegood3,$filename2good,$filename2good2,$filenamebad,$filenamebad2,$filenamebad3,$filename2bad,$filenamemappings); +my ($nogood,$nobad,$stdoutgood,$stdoutbad,$mappings); +$nogood = $nobad = $stdoutgood = $stdoutbad = $mappings = 0; +if(exists $params{out_good}) { + if($params{out_good} eq 'null') { + $nogood = 1; + } elsif($params{out_good} eq 'stdout') { + $stdoutgood = 1; + } else { + if($filename2) { + #first input file outputs + open($fhgood,">".$params{out_good}.'_1.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filenamegood = $params{out_good}.'_1.fast'.($params{out_format} == 3 ? 'q' : 'a'); + open($fhgood2,">".$params{out_good}.'_1_singletons.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filenamegood2 = $params{out_good}.'_1_singletons.fast'.($params{out_format} == 3 ? 'q' : 'a'); + #second input file outputs + open($fh2good,">".$params{out_good}.'_2.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filename2good = $params{out_good}.'_2.fast'.($params{out_format} == 3 ? 'q' : 'a'); + open($fh2good2,">".$params{out_good}.'_2_singletons.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filename2good2 = $params{out_good}.'_2_singletons.fast'.($params{out_format} == 3 ? 'q' : 'a'); + } else { + open($fhgood,">".$params{out_good}.'.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a')) or &printError('cannot open output file'); + $filenamegood = $params{out_good}.'.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'); + } + } +} else { + if($filename2) { + $fhgood = File::Temp->new( TEMPLATE => $filename.'_prinseq_good_XXXX', + SUFFIX => '.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'), + UNLINK => 0); + $filenamegood = $fhgood->filename; + $fhgood2 = File::Temp->new( TEMPLATE => $filename.'_prinseq_good_singletons_XXXX', + SUFFIX => '.fast'.($params{out_format} == 3 ? 'q' : 'a'), + UNLINK => 0); + $filenamegood2 = $fhgood2->filename; + $fh2good = File::Temp->new( TEMPLATE => $filename2.'_prinseq_good_XXXX', + SUFFIX => '.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'), + UNLINK => 0); + $filename2good = $fh2good->filename; + $fh2good2 = File::Temp->new( TEMPLATE => $filename2.'_prinseq_good_singletons_XXXX', + SUFFIX => '.fast'.($params{out_format} == 3 ? 'q' : 'a'), + UNLINK => 0); + $filename2good2 = $fh2good2->filename; + } else { + $fhgood = File::Temp->new( TEMPLATE => $filename.'_prinseq_good_XXXX', + SUFFIX => '.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'), + UNLINK => 0); + $filenamegood = $fhgood->filename; + } +} +if(exists $params{out_bad}) { + if($params{out_bad} eq 'null') { + $nobad = 1; + } elsif($params{out_bad} eq 'stdout') { + $stdoutbad = 1; + } else { + if($filename2) { + open($fhbad,">".$params{out_bad}.'_1.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filenamebad = $params{out_bad}.'_1.fast'.($params{out_format} == 3 ? 'q' : 'a'); + open($fh2bad,">".$params{out_bad}.'_2.fast'.($params{out_format} == 3 ? 'q' : 'a')) or &printError('cannot open output file'); + $filename2bad = $params{out_bad}.'_2.fast'.($params{out_format} == 3 ? 'q' : 'a'); + } else { + open($fhbad,">".$params{out_bad}.'.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a')) or &printError('cannot open output file'); + $filenamebad = $params{out_bad}.'.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'); + } + } +} else { + $fhbad = File::Temp->new( TEMPLATE => $filename.'_prinseq_bad_XXXX', + SUFFIX => '.fast'.(($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5 ) ? 'q' : 'a'), + UNLINK => 0); + $filenamebad = $fhbad->filename; + if($filename2) { + $fh2bad = File::Temp->new( TEMPLATE => $filename2.'_prinseq_bad_XXXX', + SUFFIX => '.fast'.($params{out_format} ? 'q' : 'a'), + UNLINK => 0); + $filename2bad = $fh2bad->filename; + } +} +if($params{out_format} == 2 || $params{out_format} == 5) { + if(exists $params{out_good}) { + unless($nogood) { + open($fhgood2,">".$params{out_good}.'.qual') or &printError('cannot open output file'); + $filenamegood2 = $params{out_good}.'.qual'; + } + } else { + $fhgood2 = File::Temp->new( TEMPLATE => $filename.'_prinseq_good_XXXX', + SUFFIX => '.qual', + UNLINK => 0); + $filenamegood2 = $fhgood2->filename; + } + if(exists $params{out_bad}) { + unless($nobad) { + open($fhbad2,">".$params{out_bad}.'.qual') or &printError('cannot open output file'); + $filenamebad2 = $params{out_bad}.'.qual'; + } + } else { + $fhbad2 = File::Temp->new( TEMPLATE => $filename.'_prinseq_bad_XXXX', + SUFFIX => '.qual', + UNLINK => 0); + $filenamebad2 = $fhbad2->filename; + } +} +if($params{out_format} == 4 || $params{out_format} == 5) { + if(exists $params{out_good}) { + unless($nogood) { + open($fhgood3,">".$params{out_good}.'.fasta') or &printError('cannot open output file'); + $filenamegood3 = $params{out_good}.'.fasta'; + } + } else { + $fhgood3 = File::Temp->new( TEMPLATE => $filename.'_prinseq_good_XXXX', + SUFFIX => '.fasta', + UNLINK => 0); + $filenamegood3 = $fhgood3->filename; + } + if(exists $params{out_bad}) { + unless($nobad) { + open($fhbad3,">".$params{out_bad}.'.fasta') or &printError('cannot open output file'); + $filenamebad3 = $params{out_bad}.'.fasta'; + } + } else { + $fhbad3 = File::Temp->new( TEMPLATE => $filename.'_prinseq_bad_XXXX', + SUFFIX => '.fasta', + UNLINK => 0); + $filenamebad3 = $fhbad3->filename; + } +} +if(exists $params{seq_id_mappings}) { + $mappings = 1; + if($params{seq_id_mappings}) { + open($fhmappings,">".$params{seq_id_mappings}) or &printError('cannot open output file'); + $filenamemappings = $params{seq_id_mappings}; + } else { + open($fhmappings,">".$filename.'_prinseq_good.ids') or &printError('cannot open output file'); + $filenamemappings = $filename.'_prinseq_good.ids'; + } +} + +my $numlines = 0; +$webnoprocess = 1 if(!$webnoprocess && exists $params{graph_data} && !exists $params{web} && $nogood && $nobad); +my ($progress,$counter,$part); +$progress = 0; +$counter = $part = 1; +if(exists $params{verbose}) { + print STDERR "Estimate size of input data for status report (this might take a while for large files)\n"; + $numlines = ($file1 eq 'stdin' ? 1 : &getLineNumber($file1)); + $numlines += &getLineNumber($file2) if($file2); + print STDERR "\tdone\n"; +} +if(exists $params{web}) { + &printWeb("STATUS: Estimate size of input data for status report (this might take a while for large files)"); + $numlines = &getLineNumber($file1) unless($numlines); + $numlines += &getLineNumber($file2) if($file2) +} +#for progress bar +if($numlines) { + $part = int($numlines/100); +} + +#parse input data +print STDERR "Parse and process input data\n" if(exists $params{verbose}); +print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); +if(exists $params{web}) { + &printWeb("STATUS: Parsing and processing input data"); + &printWeb("STATUS: process-status $progress"); + &printLog("Parsing and processing input data"); +} else { + &printLog("Parsing and processing input data: \"".$file1."\"".(exists $params{qual} ? " and \"".$params{qual}."\"" : "").($file2 ? " and \"".$file2."\"" : "")); +} +my $numseqs = 0; +my $numseqs2 = 0; +my $pairs = 0; +my $goodcount = 0; +my $badcount = 0; +my $badcount2 = 0; +my ($tsvfile,$seqid,$header,$seq,$qual,$count,$numbases,$numbases2,$length,$seqgd); +$count = 0; +$qual = ''; +$seq = ''; +#stats data +my (%stats,%kmers,%odds,%counts,%graphdata,%kmers2,%counts2,%graphdata2,$md5,$md5r,%md5s,%md5sg,$ucseq,$maxlength); +$maxlength = 0; +#parse data +my $seqcount = 0; +my $seqcount1 = 0; #singleton file 1 +my $seqcount2 = 0; #singleton file 2 +my $seqbases = 0; +my $seqbases1 = 0; #singleton file 1 +my $seqbases2 = 0; #singleton file 2 +my $badbases = 0; +my $badbases2 = 0; +my (@seqs,@seqsP,@printtmp,$line); #seqs for stats and graph data, seqsP for preprocessing sequences - all used for duplicate checking/removal + +if($file2) { + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file1 |") or &printError("Could not open file $file1: $!"); + open(FILE2,"perl -pe 's/\r\n|\r/\n/g' < $file2 |") or &printError("Could not open file $file2: $!"); +} else { + if($file1 eq 'stdin') { + *FILE = *STDIN; + } else { + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file1 |") or &printError("Could not open file $file1: $!"); + } + if(exists $params{qual}) { + if($params{qual} eq 'stdin') { + &printError('QUAL data cannot be read from STDIN'); + } else { + open(FILE2,"perl -pe 's/\r\n|\r/\n/g' < ".$params{qual}." |") or &printError("Could not open file ".$params{qual}.": $!"); + } + } +} + +my $exists_stats = (exists $params{stats} ? 1 : 0); +my $exists_graphdata = (exists $params{graph_data} ? 1 : 0); + +if($file2) { + my ($seqid2,$seq2,$header2,$qual2,$length2,%tmpids,@tmpdata1,@tmpdata2,$tmpindex,$tmpentry,$skip1,$skip2,$tmpid,$tmpid2); + $skip1 = $skip2 = 0; + if(exists $params{fastq}) { + while(1) { + ($seq,$seqid,$qual,$header,$tmpid) = &readEntryFastq(*FILE,$skip1--,$trimnum1); + ($seq2,$seqid2,$qual2,$header2,$tmpid2) = &readEntryFastq(*FILE2,$skip2--,$trimnum2); + last unless($seq || $seq2); + #check if both have same id; if not, store in tmpdata + if(defined $tmpid && defined $tmpid2 && $tmpid eq $tmpid2) { #same ids + &processEntryPairedEnd(length($seq),$seq,$seqid,$header,$qual,length($seq2),$seq2,$seqid2,$header2,$qual2); + if(keys %tmpids) { #empty tmpdata + %tmpids = (); + while(@tmpdata1) { + &processEntryPairedEnd(@{(shift(@tmpdata1))}[0..4]); + } + while(@tmpdata2) { + &processEntryPairedEnd(undef,undef,undef,undef,undef,@{(shift(@tmpdata2))}[0..4]); + } + } + $skip1 = $skip2 = 0; + } elsif(defined $tmpid && exists $tmpids{$tmpid}) { + while(@tmpdata1) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + $tmpindex = $tmpids{$tmpid}; + while($tmpindex-- > 0) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + #correct indices + $tmpindex = $tmpids{$tmpid}+1; + foreach my $k (keys %tmpids) { + $tmpids{$k} -= $tmpindex; + } + &processEntryPairedEnd(length($seq),$seq,$seqid,$header,$qual,@{(shift(@tmpdata2))}[0..4]); + delete($tmpids{$tmpid}); + if(defined $seqid2) { + $tmpids{$tmpid2} = scalar(@tmpdata2); + push(@tmpdata2,[length($seq2),$seq2,$seqid2,$header2,$qual2,$tmpid2]); + } + #equal out tmpdata1 and tmpdata2 + unless(scalar(@tmpdata1) == scalar(@tmpdata2)) { + $skip1 = 0; + $skip2 = scalar(@tmpdata2); + } + } elsif(defined $seqid2 && exists $tmpids{$tmpid2}) { + while(@tmpdata2) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + $tmpindex = $tmpids{$tmpid2}; + while($tmpindex-- > 0) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + #correct indices + $tmpindex = $tmpids{$tmpid2}+1; + foreach my $k (keys %tmpids) { + $tmpids{$k} -= $tmpindex; + } + &processEntryPairedEnd(@{(shift(@tmpdata1))}[0..4],length($seq2),$seq2,$seqid2,$header2,$qual2); + delete($tmpids{$tmpid2}); + if(defined $seqid) { + $tmpids{$tmpid} = scalar(@tmpdata1); + push(@tmpdata1,[length($seq),$seq,$seqid,$header,$qual,$tmpid]); + } + #equal out tmpdata1 and tmpdata2 + unless(scalar(@tmpdata1) == scalar(@tmpdata2)) { + $skip1 = scalar(@tmpdata1); + $skip2 = 0; + } + } else { #store in tmpdata + if(defined $seqid) { + $tmpids{$tmpid} = scalar(@tmpdata1); + push(@tmpdata1,[length($seq),$seq,$seqid,$header,$qual,$tmpid]); + } + if(defined $seqid2) { + $tmpids{$tmpid2} = scalar(@tmpdata2); + push(@tmpdata2,[length($seq2),$seq2,$seqid2,$header2,$qual2,$tmpid2]); + } + } + #progress bar stuff + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: process-status $progress"); + } + } + #process remaining in tmpdata + while(@tmpdata1) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + while(@tmpdata2) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..4]); + delete($tmpids{$tmpentry->[5]}); + } + } else { #format is FASTA + my ($nextid,$nextheader,$nextid2,$nextheader2); + while(1) { + ($seq,$seqid,$header,$tmpid,$nextid,$nextheader) = &readEntryFasta(*FILE,$skip1--,$trimnum1,$nextid,$nextheader); + ($seq2,$seqid2,$header2,$tmpid2,$nextid2,$nextheader2) = &readEntryFasta(*FILE2,$skip2--,$trimnum2,$nextid2,$nextheader2); + last unless($seq || $seq2); + #check if both have same id; if not, store in tmpdata + if(defined $tmpid && defined $tmpid2 && $tmpid eq $tmpid2) { #same ids + &processEntryPairedEnd(length($seq),$seq,$seqid,$header,undef,length($seq2),$seq2,$seqid2,$header2,undef); + if(keys %tmpids) { #empty tmpdata + %tmpids = (); + while(@tmpdata1) { + &processEntryPairedEnd(@{(shift(@tmpdata1))}[0..3]); + } + while(@tmpdata2) { + &processEntryPairedEnd(undef,undef,undef,undef,undef,@{(shift(@tmpdata2))}[0..3]); + } + } + $skip1 = $skip2 = 0; + } elsif(defined $tmpid && exists $tmpids{$tmpid}) { + while(@tmpdata1) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + $tmpindex = $tmpids{$tmpid}; + while($tmpindex-- > 0) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + #correct indices + $tmpindex = $tmpids{$tmpid}+1; + foreach my $k (keys %tmpids) { + $tmpids{$k} -= $tmpindex; + } + &processEntryPairedEnd(length($seq),$seq,$seqid,$header,undef,@{(shift(@tmpdata2))}[0..3]); + delete($tmpids{$tmpid}); + if(defined $seqid2) { + $tmpids{$tmpid2} = scalar(@tmpdata2); + push(@tmpdata2,[length($seq2),$seq2,$seqid2,$header2,$tmpid2]); + } + #equal out tmpdata1 and tmpdata2 + unless(scalar(@tmpdata1) == scalar(@tmpdata2)) { + $skip1 = 0; + $skip2 = scalar(@tmpdata2); + } + } elsif(defined $seqid2 && exists $tmpids{$tmpid2}) { + while(@tmpdata2) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + $tmpindex = $tmpids{$tmpid2}; + while($tmpindex-- > 0) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + #correct indices + $tmpindex = $tmpids{$tmpid2}+1; + foreach my $k (keys %tmpids) { + $tmpids{$k} -= $tmpindex; + } + &processEntryPairedEnd(@{(shift(@tmpdata1))}[0..3],undef,length($seq2),$seq2,$seqid2,$header2); + delete($tmpids{$tmpid2}); + if(defined $seqid) { + $tmpids{$tmpid} = scalar(@tmpdata1); + push(@tmpdata1,[$length,$seq,$seqid,$header,$tmpid]); + } + #equal out tmpdata1 and tmpdata2 + unless(scalar(@tmpdata1) == scalar(@tmpdata2)) { + $skip1 = scalar(@tmpdata1); + $skip2 = 0; + } + } else { #store in tmpdata + if(defined $seqid) { + $tmpids{$tmpid} = scalar(@tmpdata1); + push(@tmpdata1,[$length,$seq,$seqid,$header,$tmpid]); + } + if(defined $seqid2) { + $tmpids{$tmpid2} = scalar(@tmpdata2); + push(@tmpdata2,[length($seq2),$seq2,$seqid2,$header2,$tmpid2]); + } + } + #progress bar stuff + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: process-status $progress"); + } + } + #process remaining in tmpdata + while(@tmpdata1) { + $tmpentry = shift(@tmpdata1); + &processEntryPairedEnd(@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + while(@tmpdata2) { + $tmpentry = shift(@tmpdata2); + &processEntryPairedEnd(undef,undef,undef,undef,undef,@$tmpentry[0..3]); + delete($tmpids{$tmpentry->[4]}); + } + } +} else { + if(exists $params{fastq}) { + foreach(@dataread) { #only used for stdin inputs + chomp(); + if($count == 0 && /^\@(\S+)\s*(.*)$/o) { + $length = length($seq); + if($length) { + &processEntry($length,$seq,$seqid,$qual,$header); + } + $seqid = $1; + $header = $2 || ''; + $seq = ''; + $qual = ''; + } elsif($count == 1) { + $seq = $_; + } elsif($count == 3) { + $qual = $_; + $count = -1; + } + $count++; + } + while(<FILE>) { + chomp(); + if($count == 0 && /^\@(\S+)\s*(.*)$/o) { + $length = length($seq); + if($length) { + &processEntry($length,$seq,$seqid,$qual,$header); + } + $seqid = $1; + $header = $2 || ''; + $seq = ''; + $qual = ''; + } elsif($count == 1) { + $seq = $_; + } elsif($count == 3) { + $qual = $_; + $count = -1; + } + $count++; + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: process-status $progress"); + } + } + #add last one + $length = length($seq); + if($length) { + &processEntry($length,$seq,$seqid,$qual,$header); + } + } elsif(exists $params{fasta}) { + foreach(@dataread) { #only used for stdin inputs + chomp(); + if(/^>(\S+)\s*(.*)$/o) { + $length = length($seq); + if($length) { + #get qual data if provided + if(exists $params{qual}) { + while(<FILE2>) { + chomp(); + last if(/^>/ && $qual); + next if(/^>/); + $qual .= $_.' '; + } + $qual = &convertQualNumsToAsciiString($qual); + } + &processEntry($length,$seq,$seqid,$qual,$header); + $qual = ''; + } + $seqid = $1; + $header = $2 || ''; + $seq = ''; + } else { + $seq .= $_; + } + } + while(<FILE>) { + chomp(); + if(/^>(\S+)\s*(.*)$/o) { + $length = length($seq); + if($length) { + #get qual data if provided + if(exists $params{qual}) { + while(<FILE2>) { + chomp(); + last if(/^>/ && $qual); + next if(/^>/); + $qual .= $_.' '; + } + $qual = &convertQualNumsToAsciiString($qual); + } + &processEntry($length,$seq,$seqid,$qual,$header); + $qual = ''; + } + $seqid = $1; + $header = $2 || ''; + $seq = ''; + } else { + $seq .= $_; + } + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: process-status $progress"); + } + } + #add last one + $length = length($seq); + if($length) { + #get qual data if provided + if(exists $params{qual}) { + while(<FILE2>) { + chomp(); + last if(/^>/ && $qual); + next if(/^>/); + $qual .= $_.' '; + } + $qual = &convertQualNumsToAsciiString($qual); + } + &processEntry($length,$seq,$seqid,$qual,$header); + $qual = ''; + } + } +} + +print STDERR "\r\tdone \n" if(exists $params{verbose}); +&printWeb("STATUS: process-status 100"); +&printWeb("Done parsing and processing input data"); +&printLog("Done parsing and processing input data"); + +if($derep && !exists $params{stats} && !$exactonly && !$webnoprocess) { + &printLog("Remove duplicates"); + &derepSeqs(); + &printLog("Done removing duplicates"); +} + +close(FILE); +close(FILE2) if(exists $params{qual} || $file2); + +print STDERR "Clean up empty files\n" if(exists $params{verbose} && !exists $params{stats}); +#close filehandles +unless($nogood || $stdoutgood) { + close($fhgood); + if($file2) { + close($fhgood2); + close($fh2good); + close($fh2good2); + } +} +unless($nobad || $stdoutbad) { + close($fhbad); + if($file2) { + close($fh2bad); + } +} +if($params{out_format} == 2 || $params{out_format} == 5) { + close($fhgood2) unless($nogood || $stdoutgood); + close($fhbad2) unless($nobad || $stdoutbad); +} +if($params{out_format} == 4 || $params{out_format} == 5) { + close($fhgood3) unless($nogood || $stdoutgood); + close($fhbad3) unless($nobad || $stdoutbad); +} +if(exists $params{seq_id_mappings}) { + close($fhmappings); +} +#remove empty files +if($seqcount == 0 && !$nogood && !$stdoutgood) { + unlink($filenamegood); + if($params{out_format} == 2 || $params{out_format} == 5) { + unlink($filenamegood2); + } + if($params{out_format} == 4 || $params{out_format} == 5) { + unlink($filenamegood3); + } + unlink($fhmappings); +} +if($badcount == 0 && !$nobad && !$stdoutbad) { + unlink($filenamebad); + if($params{out_format} == 2 || $params{out_format} == 5) { + unlink($filenamebad2); + } + if($params{out_format} == 4 || $params{out_format} == 5) { + unlink($filenamebad3); + } +} +if($file2) { + foreach my $f ($filenamegood2,$filename2good,$filename2good2,$filename2bad) { + if(defined $f && -e $f && &getLineNumber($f) == 0) { + unlink($f); + } + } +} +print STDERR "\tdone\n" if(exists $params{verbose} && !exists $params{stats}); + +#print processing stats +if((exists $params{verbose} || !$webnoprocess) && !exists $params{stats}) { + print STDERR "Input and filter stats:\n"; + if($file2) { + print STDERR "\tInput sequences (file 1): ".&addCommas($numseqs)."\n"; + print STDERR "\tInput bases (file 1): ".&addCommas($numbases)."\n"; + print STDERR "\tInput mean length (file 1): ".sprintf("%.2f",$numbases/$numseqs)."\n" if($numseqs); + print STDERR "\tInput sequences (file 2): ".&addCommas($numseqs2)."\n"; + print STDERR "\tInput bases (file 2): ".&addCommas($numbases2)."\n"; + print STDERR "\tInput mean length (file 2): ".sprintf("%.2f",$numbases2/$numseqs2)."\n" if($numseqs2); + print STDERR "\tGood sequences (pairs): ".&addCommas($seqcount)."\n" if($numseqs); + print STDERR "\tGood bases (pairs): ".&addCommas($seqbases)."\n" if($seqcount); + print STDERR "\tGood mean length (pairs): ".sprintf("%.2f",$seqbases/$seqcount)."\n" if($seqcount); + print STDERR "\tGood sequences (singletons file 1): ".&addCommas($seqcount1)." (".sprintf("%.2f",(100*$seqcount1/$numseqs))."%)\n" if($numseqs); + print STDERR "\tGood bases (singletons file 1): ".&addCommas($seqbases1)."\n" if($seqcount1); + print STDERR "\tGood mean length (singletons file 1): ".sprintf("%.2f",$seqbases1/$seqcount1)."\n" if($seqcount1); + print STDERR "\tGood sequences (singletons file 2): ".&addCommas($seqcount2)." (".sprintf("%.2f",(100*$seqcount2/$numseqs2))."%)\n" if($numseqs2); + print STDERR "\tGood bases (singletons file 2): ".&addCommas($seqbases2)."\n" if($seqcount2); + print STDERR "\tGood mean length (singletons file 2): ".sprintf("%.2f",$seqbases2/$seqcount2)."\n" if($seqcount2); + print STDERR "\tBad sequences (file 1): ".&addCommas($badcount)." (".sprintf("%.2f",(100*$badcount/$numseqs))."%)\n" if($numseqs); + print STDERR "\tBad bases (file 1): ".&addCommas($badbases)."\n" if($badcount); + print STDERR "\tBad mean length (file 1): ".sprintf("%.2f",$badbases/$badcount)."\n" if($badcount); + print STDERR "\tBad sequences (file 2): ".&addCommas($badcount2)." (".sprintf("%.2f",(100*$badcount2/$numseqs2))."%)\n" if($numseqs2); + print STDERR "\tBad bases (file 2): ".&addCommas($badbases2)."\n" if($badcount2); + print STDERR "\tBad mean length (file 2): ".sprintf("%.2f",$badbases2/$badcount2)."\n" if($badcount2); + } else { + print STDERR "\tInput sequences: ".&addCommas($numseqs)."\n"; + print STDERR "\tInput bases: ".&addCommas($numbases)."\n"; + print STDERR "\tInput mean length: ".sprintf("%.2f",$numbases/$numseqs)."\n" if($numseqs); + print STDERR "\tGood sequences: ".&addCommas($seqcount)." (".sprintf("%.2f",(100*$seqcount/$numseqs))."%)\n" if($numseqs); + print STDERR "\tGood bases: ".&addCommas($seqbases)."\n" if($seqcount); + print STDERR "\tGood mean length: ".sprintf("%.2f",$seqbases/$seqcount)."\n" if($seqcount); + print STDERR "\tBad sequences: ".&addCommas($badcount)." (".sprintf("%.2f",(100*$badcount/$numseqs))."%)\n" if($numseqs); + print STDERR "\tBad bases: ".&addCommas($badbases)."\n" if($badcount); + print STDERR "\tBad mean length: ".sprintf("%.2f",$badbases/$badcount)."\n" if($badcount); + } + my $tmp = &getFiltercounts(); + if($tmp) { + print STDERR "\tSequences filtered by specified parameters:\n"; + if(scalar(@$tmp)) { + print STDERR "\t$_\n" foreach(@$tmp); + } else { + print STDERR "\tnone\n"; + } + } + if(exists $params{log}) { + if($file2) { + &printLog("Input sequences (file 1): ".&addCommas($numseqs)); + &printLog("Input bases (file 1): ".&addCommas($numbases)); + &printLog("Input mean length (file 1): ".sprintf("%.2f",$numbases/$numseqs)) if($numseqs); + &printLog("Input sequences (file 2): ".&addCommas($numseqs2)); + &printLog("Input bases (file 2): ".&addCommas($numbases2)); + &printLog("Input mean length (file 2): ".sprintf("%.2f",$numbases2/$numseqs2)) if($numseqs2); + &printLog("Good sequences (pairs): ".&addCommas($seqcount)) if($numseqs); + &printLog("Good bases (pairs): ".&addCommas($seqbases)) if($seqcount); + &printLog("Good mean length (pairs): ".sprintf("%.2f",$seqbases/$seqcount)) if($seqcount); + &printLog("Good sequences (singletons file 1): ".&addCommas($seqcount1)." (".sprintf("%.2f",(100*$seqcount1/$numseqs))."%)") if($numseqs); + &printLog("Good bases (singletons file 1): ".&addCommas($seqbases1)) if($seqcount1); + &printLog("Good mean length (singletons file 1): ".sprintf("%.2f",$seqbases1/$seqcount1)) if($seqcount1); + &printLog("Good sequences (singletons file 2): ".&addCommas($seqcount2)." (".sprintf("%.2f",(100*$seqcount2/$numseqs2))."%)") if($numseqs2); + &printLog("Good bases (singletons file 2): ".&addCommas($seqbases2)) if($seqcount2); + &printLog("Good mean length (singletons file 2): ".sprintf("%.2f",$seqbases2/$seqcount2)) if($seqcount2); + &printLog("Bad sequences (file 1): ".&addCommas($badcount)." (".sprintf("%.2f",(100*$badcount/$numseqs))."%)") if($numseqs); + &printLog("Bad bases (file 1): ".&addCommas($badbases)) if($badcount); + &printLog("Bad mean length (file 1): ".sprintf("%.2f",$badbases/$badcount)) if($badcount); + &printLog("Bad sequences (file 2): ".&addCommas($badcount2)." (".sprintf("%.2f",(100*$badcount2/$numseqs2))."%)") if($numseqs2); + &printLog("Bad bases (file 2): ".&addCommas($badbases2)) if($badcount2); + &printLog("Bad mean length (file 2): ".sprintf("%.2f",$badbases2/$badcount2)) if($badcount2); + } else { + &printLog("Input sequences: ".&addCommas($numseqs)); + &printLog("Input bases: ".&addCommas($numbases)); + &printLog("Input mean length: ".sprintf("%.2f",$numbases/$numseqs)) if($numseqs); + &printLog("Good sequences: ".&addCommas($seqcount)." (".sprintf("%.2f",(100*$seqcount/$numseqs))."%)") if($numseqs); + &printLog("Good bases: ".&addCommas($seqbases)) if($seqcount); + &printLog("Good mean length: ".sprintf("%.2f",$seqbases/$seqcount)) if($seqcount); + &printLog("Bad sequences: ".&addCommas($badcount)." (".sprintf("%.2f",(100*$badcount/$numseqs))."%)") if($numseqs); + &printLog("Bad bases: ".&addCommas($badbases)) if($badcount); + &printLog("Bad mean length: ".sprintf("%.2f",$badbases/$badcount)) if($badcount); + } + if($tmp) { + &printLog("Sequences filtered by specified parameters:"); + if(scalar(@$tmp)) { + &printLog($_) foreach(@$tmp); + } else { + &printLog("none"); + } + + } + } +} + +#print summary stats +if(exists $params{stats}) { + if(exists $params{stats_info}) { + $stats{stats_info}->{reads} = $numseqs; + $stats{stats_info}->{bases} = $numbases; + if($file2) { + $stats{stats_info2}->{reads} = $numseqs2; + $stats{stats_info2}->{bases} = $numbases2; + } + } + if(exists $params{stats_len}) { + $stats{stats_len} = &generateStats($counts{length}); + $stats{stats_len2} = &generateStats($counts2{length}) if($file2); + } + if(exists $params{stats_dinuc}) { + foreach my $i (keys %odds) { + $stats{stats_dinuc}->{lc($i)} = sprintf("%.9f",$odds{$i}/($numseqs+$numseqs2)); + } + } + if(exists $params{stats_tag}) { + #calculate frequency of 5-mers + my $kmersum = &getTagFrequency(\%kmers); + #check for frequency of MID tags + my $midsum = 0; + my $midcount = 0; + my @midseqs; + foreach my $mid (keys %MIDS) { + $midsum += $MIDS{$mid}; + if($MIDS{$mid} > $numseqs/34) { #in more than 34/100 (approx. 3%) as this is estimated average error for MIDs + $midcount++; + push(@midseqs,$mid); + } + } + $stats{stats_tag}->{midnum} = $midcount; + if($midcount) { + $stats{stats_tag}->{midseq} = join(",",@midseqs); + } + if($midsum > $kmersum->{5}) { + $kmersum->{5} = $midsum; + } + foreach my $kmer (keys %$kmersum) { + $stats{stats_tag}->{'prob'.$kmer} = sprintf("%d",(100/$numseqs*$kmersum->{$kmer})); + } + if($file2) { + my $kmersum2 = &getTagFrequency(\%kmers2); + foreach my $kmer (keys %$kmersum2) { + $stats{stats_tag2}->{'prob'.$kmer} = sprintf("%d",(100/$numseqs2*$kmersum2->{$kmer})); + } + } + } + if(exists $params{stats_assembly}) { + #calculate N50, N90, etc + #sort in decreasing order + my @sortvals = sort {$b <=> $a} keys %{$counts{length}}; + #calculate nx values + my $n50 = $numbases*0.5; + my $n75 = $numbases*0.75; + my $n90 = $numbases*0.9; + my $n95 = $numbases*0.95; + my $curlen = 0; + foreach my $len (@sortvals) { + foreach my $i (1..$counts{length}->{$len}) { + $curlen += $len; + if($curlen >= $n50 && !exists $stats{stats_assembly}->{N50}) { + $stats{stats_assembly}->{N50} = $len; + } elsif($curlen >= $n75 && !exists $stats{stats_assembly}->{N75}) { + $stats{stats_assembly}->{N75} = $len; + } elsif($curlen >= $n90 && !exists $stats{stats_assembly}->{N90}) { + $stats{stats_assembly}->{N90} = $len; + } elsif($curlen >= $n95 && !exists $stats{stats_assembly}->{N95}) { + $stats{stats_assembly}->{N95} = $len; + } + } + } + foreach my $i (50,75,90,95) { + unless(exists $stats{stats_assembly}->{'N'.$i}) { + $stats{stats_assembly}->{'N'.$i} = '-'; + } + } + } + if(exists $params{stats_dupl}) { + #empty vars before n-plicate check + %counts = %kmers = %odds = (); + #0 - exact dub, 1 - prefix, 2 - suffix, 3 - revcomp exact, 4 - revcomp prefix/suffix + my %types = (0 => 'exact', 1 => '5', 2 => '3', 3 => 'exactrevcomp', 4 => 'revcomp'); + my ($dupls,undef,undef) = &checkForDupl(\@seqs,\%types,$numseqs); + #set zero counts + foreach my $s (keys %types) { + $stats{stats_dupl}->{$types{$s}} = 0; + $stats{stats_dupl}->{$types{$s}.'maxd'} = 0; + } + foreach my $n (keys %$dupls) { + foreach my $s (keys %{$dupls->{$n}}) { + $stats{stats_dupl}->{$types{$s}} += $dupls->{$n}->{$s} * $n; + $stats{stats_dupl}->{$types{$s}.'maxd'} = $n unless($stats{stats_dupl}->{$types{$s}.'maxd'} > $n); + $stats{stats_dupl}->{total} += $dupls->{$n}->{$s} * $n; + } + } + } + foreach my $type (sort keys %stats) { + foreach my $value (sort keys %{$stats{$type}}) { + print STDOUT join("\t",$type,$value,(defined $stats{$type}->{$value} ? $stats{$type}->{$value} : '-'))."\n"; + } + } +} + +if(exists $params{graph_data}) { + &printLog("Generate graph data"); + print STDERR "Generate graph data\n" if(exists $params{verbose}); + &printWeb("Start generating statistics from data"); + #get qual stats + my $binval = &getBinVal($maxlength); + if($graphdata{quals} || $graphdata{quala}) { + &printWeb("Generating statistics from quality data"); + if($graphdata{quals}) { + $graphdata{quals} = &generateStatsType($graphdata{quals}); + } + if($graphdata{quala}) { + #calculate bin values + my $tmppos; + foreach my $pos (keys %{$graphdata{quala}}) { + $tmppos = int(($pos-1)/$binval); + foreach my $val (keys %{$graphdata{quala}->{$pos}}) { + $graphdata{qualsbin}->{$tmppos}->{$val} += $graphdata{quala}->{$pos}->{$val}; + } + } + $graphdata{qualsbin} = &generateStatsType($graphdata{qualsbin}); + } + } + if($file2 && ($graphdata2{quals} || $graphdata2{quala})) { + $graphdata{qualsmean2} = $graphdata2{qualsmean}; + if($graphdata2{quals}) { + $graphdata{quals2} = &generateStatsType($graphdata2{quals}); + } + if($graphdata2{quala}) { + #calculate bin values + my $tmppos; + foreach my $pos (keys %{$graphdata2{quala}}) { + $tmppos = int(($pos-1)/$binval); + foreach my $val (keys %{$graphdata2{quala}->{$pos}}) { + $graphdata{qualsbin2}->{$tmppos}->{$val} += $graphdata2{quala}->{$pos}->{$val}; + } + } + $graphdata{qualsbin2} = &generateStatsType($graphdata{qualsbin2}); + } + } + #get length stats + if($graphdata{counts}) { + &printWeb("Generating statistics from basic counts"); + $graphdata{stats} = &generateStatsType($graphdata{counts}); + } + if($file2 && $graphdata2{counts}) { + $graphdata{counts2} = $graphdata2{counts}; + $graphdata{stats2} = &generateStatsType($graphdata2{counts}); + } + #check for ns + if(($webstats{ns} || $graphstats{ns}) && scalar(keys %{$graphdata{counts}->{ns}}) == 0) { + $graphdata{counts}->{ns}->{0} = 0; + } + if($file2 && ($webstats{ns} || $graphstats{ns}) && scalar(keys %{$graphdata{counts2}->{ns}}) == 0) { + $graphdata{counts2}->{ns}->{0} = 0; + } + #add base frequencies + foreach my $site (keys %{$graphdata{freqs}}) { + foreach my $i (0..$TAG_LENGTH-1) { + foreach my $base ('A','C','G','T','N') { + if(exists $graphdata{freqs}->{$site}->{$i}->{$base}) { + $graphdata{freqs}->{$site}->{$i}->{$base} = int($graphdata{freqs}->{$site}->{$i}->{$base}*100/$numseqs); + } else { + $graphdata{freqs}->{$site}->{$i}->{$base} = 0; + } + } + } + } + if($file2) { + foreach my $site (keys %{$graphdata2{freqs}}) { + foreach my $i (0..$TAG_LENGTH-1) { + foreach my $base ('A','C','G','T','N') { + if(exists $graphdata2{freqs}->{$site}->{$i}->{$base}) { + $graphdata{freqs2}->{$site}->{$i}->{$base} = int($graphdata2{freqs}->{$site}->{$i}->{$base}*100/$numseqs2); + } else { + $graphdata{freqs2}->{$site}->{$i}->{$base} = 0; + } + } + } + } + } + #calculate possibility for tag sequences + if(scalar(keys %{$graphdata{kmers}})) { + &printWeb("Generating statistics for tag sequences"); + my %prob; + #calculate frequency of 5-mers + my $kmersum = &getTagFrequency($graphdata{kmers},$numseqs); + #check for frequency of MID tags + my $midsum = 0; + my $midcount = 0; + my @midseqs; + foreach my $mid (keys %{$graphdata{mids}}) { + $midsum += $graphdata{mids}->{$mid}; + if($graphdata{mids}->{$mid} > $numseqs/34) { #in more than 34/100 (approx. 3%) as this is estimated average error for MIDs + $midcount++; + push(@midseqs,$mid); + } + } + if($midcount) { + $graphdata{tagmidseq} = join(",",@midseqs); + } + $graphdata{tagmidnum} = $midcount; + if($midsum > $kmersum->{5}) { + $kmersum->{5} = $midsum; + } + foreach my $kmer (keys %$kmersum) { + $prob{$kmer} = sprintf("%d",(100/$numseqs*$kmersum->{$kmer})); + } + $graphdata{tagprob} = \%prob; + delete($graphdata{kmers}); + } + if($file2 && scalar(keys %{$graphdata2{kmers}})) { + my %prob; + #calculate frequency of 5-mers + my $kmersum = &getTagFrequency($graphdata2{kmers},$numseqs2); + foreach my $kmer (keys %$kmersum) { + $prob{$kmer} = sprintf("%d",(100/$numseqs2*$kmersum->{$kmer})); + } + $graphdata{tagprob2} = \%prob; + delete($graphdata2{kmers}); + } + #add dinucleotide odd ratios + if(($webstats{dn} || $graphstats{dn}) && scalar(keys %{$graphdata{dinucodds}})) { + &printWeb("Generating statistics from dinucleotide counts"); + foreach my $i (keys %{$graphdata{dinucodds}}) { + $graphdata{dinucodds}->{$i} = sprintf("%.9f",$graphdata{dinucodds}->{$i}/($numseqs+$numseqs2)); + } + } + #check for n-plicates (for paired-end data, not separated by input file) + if($webstats{de} || $webstats{da} || $graphstats{de} || $graphstats{da}) { + &printWeb("Generating statistics from duplicate counts"); + if($webstats{de} || $graphstats{de}) { + foreach my $m (keys %md5sg) { + if(exists $md5sg{$m}->{0} && $md5sg{$m}->{0} > 0) { + $graphdata{dubscounts}->{$md5sg{$m}->{0}}->{0}++; + } + if(exists $md5sg{$m}->{3} && $md5sg{$m}->{3} > 0) { + $graphdata{dubscounts}->{$md5sg{$m}->{3}}->{3}++; + } + } + } else { + my %types = (0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0); + ($graphdata{dubscounts},$graphdata{dubslength},undef) = &checkForDupl(\@seqs,\%types,$numseqs); #0 - exact dub, 1 - prefix, 2 - suffix, 3 - revcomp exact, 4 - revcomp prefix/suffix + } + } + + #generate JSON string without the need of the JSON module + my $str = ''; + $str .= '{"numseqs":'.$numseqs.',"numbases":'.$numbases.',"pairedend":'.($file2 ? 1 : 0).($file2 ? ',"numseqs2":'.$numseqs2.',"numbases2":'.$numbases2.',"pairs":'.$pairs : '').',"maxlength":'.$maxlength.',"binval":'.$binval.',"exactonly":'.$exactonly.',"tagmidnum":'.($graphdata{tagmidnum}||0).',"scale":'.$scale.',"filename1":"'.(exists $params{filename1} ? $params{filename1} : &convertStringToInt(&getFileName($file1))).'","format1":"'.(exists $params{fasta} ? 'fasta' : 'fastq').'"'.(exists $params{qual} ? ',"filename2":"'.(exists $params{filename2} ? $params{filename2} : &convertStringToInt(&getFileName($params{qual}))).'","format2":"qual"' : '').($file2 ? ',"filename2":"'.(exists $params{filename2} ? $params{filename2} : &convertStringToInt(&getFileName($file2))).'"' : ''); + foreach my $s (qw(counts counts2 stats stats2 quals quals2 qualsbin qualsbin2 complvals dubscounts dubslength)) { + next unless exists($graphdata{$s}); + $str .= ',"'.$s.'":{'; + foreach my $t (sort keys %{$graphdata{$s}}) { + $str .= '"'.$t.'":{'; + while (my ($k,$v) = each(%{$graphdata{$s}->{$t}})) { + if($v =~ /^\d+$/) { + $str .= '"'.$k.'":'.$v.','; + } else { + $str .= '"'.$k.'":"'.$v.'",'; + } + } + $str =~ s/\,$//; + $str .= '},'; + } + $str =~ s/\,$//; + $str .= '}'; + } + foreach my $s (qw(qualsmean qualsmean2 tagprob tagprob2 compldust complentropy dinucodds)) { + next unless exists($graphdata{$s}); + $str .= ',"'.$s.'":{'; + while (my ($k,$v) = each(%{$graphdata{$s}})) { + if($v =~ /^\d+$/) { + $str .= '"'.$k.'":'.$v.','; + } else { + $str .= '"'.$k.'":"'.$v.'",'; + } + } + $str =~ s/\,$//; + $str .= '}'; + } + $str .= ',"tail":'.(exists $graphdata{counts}->{tail5} || exists $graphdata{counts}->{tail3} ? 1 : 0); + $str .= ',"tail2":'.(exists $graphdata2{counts}->{tail5} || exists $graphdata2{counts}->{tail3} ? 1 : 0) if($file2); + if($webstats{ts} || $graphstats{ts}) { + $str .= ',"freqs":{'; + foreach my $i (keys %{$graphdata{freqs}}) { # 5, 3 + $str .= '"'.$i.'":{'; + foreach my $pos (keys %{$graphdata{freqs}->{$i}}) { + $str .= '"'.$pos.'":{'; + while (my ($base,$v) = each(%{$graphdata{freqs}->{$i}->{$pos}})) { + $str .= '"'.$base.'":'.$v.','; + } + $str =~ s/\,$//; + $str .= '},'; + } + $str =~ s/\,$//; + $str .= '},'; + } + $str =~ s/\,$//; + $str .= '}'; + if($file2) { + $str .= ',"freqs2":{'; + foreach my $i (keys %{$graphdata{freqs2}}) { # 5, 3 + $str .= '"'.$i.'":{'; + foreach my $pos (keys %{$graphdata{freqs2}->{$i}}) { + $str .= '"'.$pos.'":{'; + while (my ($base,$v) = each(%{$graphdata{freqs2}->{$i}->{$pos}})) { + $str .= '"'.$base.'":'.$v.','; + } + $str =~ s/\,$//; + $str .= '},'; + } + $str =~ s/\,$//; + $str .= '},'; + } + $str =~ s/\,$//; + $str .= '}'; + } + } + foreach my $s (qw(tagmidseq)) { + next unless exists($graphdata{$s}); + $str .= ',"'.$s.'":"'.$graphdata{$s}.'"'; + } + + $str =~ s/\,$//; + $str .= '}'; + + #write data to file + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + open(FH, ">", $params{graph_data}) or &printError("Cannot open file ".$params{graph_data}.": $!"); + flock(FH, LOCK_EX) or &printError("Cannot lock file ".$params{graph_data}.": $!"); + print FH "#Graph data\n"; + print FH "#[prinseq-".$WHAT."-$VERSION] [$time] Command: \"perl prinseq-".$WHAT.".pl".$command."\"\n" unless(exists $params{web}); + print FH $str; + flock(FH, LOCK_UN) or &printError("Cannot unlock ".$params{graph_data}.": $!"); + close(FH); + &printLog("Done with graph data"); + print STDERR "\tdone\n" if(exists $params{verbose}); +} + +&printWeb("STATUS: done"); + +## +################################################################################# +### MISC FUNCTIONS +################################################################################# +## + +sub printError { + my $msg = shift; + print STDERR "\nERROR: ".$msg.".\n\nTry \'perl prinseq-".$WHAT.".pl -h\' for more information.\nExit program.\n"; + &printLog("ERROR: ".$msg.". Exit program.\n"); + exit(0); +} + +sub printWarning { + my $msg = shift; + print STDERR "WARNING: ".$msg.".\n"; + &printLog("WARNING: ".$msg.".\n"); +} + +sub printWeb { + my $msg = shift; + if(exists $params{web}) { + print STDERR &getTime()."$msg\n"; + } +} + +sub getTime { + return sprintf("[%02d/%02d/%04d %02d:%02d:%02d] ",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); +} + +sub printLog { + my $msg = shift; + if(exists $params{log}) { + my $time = sprintf("%02d/%02d/%04d %02d:%02d:%02d",sub {($_[4]+1,$_[3],$_[5]+1900,$_[2],$_[1],$_[0])}->(localtime)); + open(FH, ">>", $params{log}) or &printError("Cannot open file ".$params{log}.": $!"); + flock(FH, LOCK_EX) or &printError("Cannot lock file ".$params{log}.": $!"); + print FH "[prinseq-".$WHAT."-$VERSION] [$time] $msg\n"; + flock(FH, LOCK_UN) or &printError("Cannot unlock ".$params{log}.": $!"); + close(FH); + } +} + +sub addCommas { + my $num = shift; + return unless(defined $num); + return $num if($num < 1000); + $num = scalar reverse $num; + $num =~ s/(\d{3})/$1\,/g; + $num =~ s/\,$//; + $num = scalar reverse $num; + return $num; +} + +sub getLineNumber { + my $file = shift; + my $lines = 0; + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file |") or &printError("Could not open file $file: $!"); + $lines += tr/\n/\n/ while sysread(FILE, $_, 2 ** 16); + close(FILE); + return $lines; +} + +sub readParamsFile { + my $file = shift; + my @args; + my %parameters = (); + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file |") or &printError("Could not open file $file: $!"); + while(<FILE>) { + next if(/^\#/); + chomp(); + @args = split(/\s+/); + if(@args) { + $args[0] =~ s/^\-//; + $parameters{$args[0]} = (defined $args[1] ? join(" ",@args[1..scalar(@args)-1]) : ''); + } + } + close(FILE); + return \%parameters; +} + +sub checkFileFormat { + my $file = shift; + + my ($format,$count,$id,$fasta,$fastq,$qual); + $count = 3; + $fasta = $fastq = $qual = 0; + $format = 'unknown'; + + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file |") or &printError("Could not open file $file: $!"); + while (<FILE>) { +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/o) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/o) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/o))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/o) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/o) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/o) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/o))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/o) { + $fastq = 3 if($id eq $1 || /^\+\s*$/o); + } + } + close(FILE); + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } + + return $format; +} + +sub checkSlashnum { + my $file = shift; + open(FILE,"perl -pe 's/\r\n|\r/\n/g' < $file |") or &printError("Could not open file $file: $!"); + while(<FILE>) { + chomp(); + next unless(length($_)); + if(/^\S+\/[12]\s*/ || /^\S+\_[LR]\s*/) { + close(FILE); + return (1,2,2); + } elsif(/^\S+\_left\s*/) { + close(FILE); + return (1,6,5); + } elsif(/^\S+\_right\s*/) { + close(FILE); + return (1,5,6); + } else { + close(FILE); + return 0; + } + } + return 0; +} + +sub checkInputFormat { + my ($format,$count,$id,$fasta,$fastq,$qual); + $count = 3; + $fasta = $fastq = $qual = 0; + $format = 'unknown'; + + while (<STDIN>) { + push(@dataread,$_); +# chomp(); + # next unless(length($_)); + if($count-- == 0) { + last; + } elsif(!$fasta && /^\>\S+\s*/o) { + $fasta = 1; + $qual = 1; + } elsif($fasta == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/o) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/o))) { + $fasta = 2; + } elsif($qual == 1 && /^\s*\d+/) { + $qual = 2; + } elsif(!$fastq && /^\@(\S+)\s*/) { + $id = $1; + $fastq = 1; + } elsif($fastq == 1 && (($aa && /^[ABCDEFGHIKLMNOPQRSTUVWYZXabcdefghiklmmopqrstuvwyzx*-]+/o) || (!$aa && /^[ACGTURYKMSWBDHVNXacgturykmswbdhvnx-]+/o))) { + $fastq = 2; + } elsif($fastq == 2 && /^\+(\S*)\s*/o) { + $fastq = 3 if($id eq $1 || /^\+\s*$/o); + } + } + + if($fasta == 2) { + $format = 'fasta'; + } elsif($qual == 2) { + $format = 'qual'; + } elsif($fastq == 3) { + $format = 'fastq'; + } + + return $format; +} + +sub getArrayMean { + return @_ ? sum(@_) / @_ : 0; +} + +sub convertQualNumsToAscii { + my $qual = shift; + my @ascii; + $qual =~ s/^\s+//; + $qual =~ s/\s+$//; + my @nums = split(/\s+/,$qual); + foreach(@nums) { + push(@ascii,chr(($_ <= 93 ? $_ : 93) + 33)); + } + return \@ascii; +} + +sub convertQualNumsToAsciiString { + my $qual = shift; + my $ascii; + $qual =~ s/^\s+//; + $qual =~ s/\s+$//; + my @nums = split(/\s+/,$qual); + foreach(@nums) { + $ascii .= chr(($_ <= 93 ? $_ : 93) + 33); + } + return $ascii; +} + +sub convertQualAsciiToNums { + my $qual = shift; + my @nums; + my @ascii = split(//,$qual); + foreach(@ascii) { + push(@nums,(ord($_) - 33)); + } + return \@nums; +} + +sub convertQualAsciiToNumsPhred64 { + my $qual = shift; + my @nums; + my $tmp; + my $err = 0; + my @ascii = split('',$qual); + foreach(@ascii) { + $tmp = (ord($_) - 64); + if($tmp < 0) { + $err = 1; + last; + } + push(@nums,$tmp); + } + return (\@nums,$err); +} + +sub convertQualArrayToString { + my ($nums,$linelen) = @_; + $linelen = 80 unless($linelen); + my $str; + my $count = 1; + foreach my $n (@$nums) { + $str .= ($n < 10 ? ' '.$n : $n).' '; + if(++$count > $linelen) { + $count = 1; + $str =~ s/\s$//; + $str .= "\n"; + } + } + $str =~ s/[\s\n]$//; + return $str; +} + +sub checkRange { + my ($range,$val) = @_; + my @ranges = split(/\,/,$range); + foreach my $r (@ranges) { + my @tmp = split(/\-/,$r); + return 0 if($val < $tmp[0] || $val > $tmp[1]); + } + return 1; +} + +sub getFiltercounts { + my @order = qw(seq_num trim_left trim_right trim_left_p trim_right_p trim_qual_left trim_qual_right trim_tail_left trim_tail_right trim_ns_left trim_ns_right zero_length min_len max_len range_len min_qual_score max_qual_score min_qual_mean max_qual_mean min_gc max_gc range_gc ns_max_p ns_max_n noniupac custom_params lc_method derep); + my @counts; + foreach my $p (@order) { + if(exists $filtercount{$p}) { + push(@counts,$p.': '.$filtercount{$p}); + } + } + return \@counts; +} + +sub readEntryFastq { + my ($fh,$skip,$trimnum) = @_; + if($skip > 0) { + return 1; + } + my ($seq,$seqid,$qual,$header,$line,$tmpid); + if(defined($line = <$fh>)) { + $line =~ /^\@(\S+)\s*(.*)$/o; + $seqid = $1; + $header = $2 || ''; + $seq = readline($fh); + chomp($seq); + readline($fh); + $qual = readline($fh); + chomp($qual); + #progress bar stuff + $counter += 4; + } + if($slashnum) { + $tmpid = substr($seqid, 0, -$trimnum) + } else { + $tmpid = $seqid; + } + return ($seq,$seqid,$qual,$header,$tmpid); +} + +sub readEntryFasta { + my ($fh,$skip,$trimnum,$nextid,$nextheader) = @_; + if($skip > 0) { + return (1,undef,undef,undef,$nextid,$nextheader); + } + my ($seq,$seqid,$header,$line,$tmpid); + $seq = ''; + if($nextid) { + $seqid = $nextid; + $header = $nextheader; + } + while(<$fh>) { + chomp(); + if(/^>(\S+)\s*(.*)$/o) { + if($seq) { + $nextid = $1; + $nextheader = $2 || ''; + last; + } + $seqid = $1; + $header = $2 || ''; + } else { + $seq .= $_; + } + } + if($slashnum) { + $tmpid = substr($seqid, 0, -$trimnum) + } else { + $tmpid = $seqid; + } + return ($seq,$seqid,$header,$tmpid,$nextid,$nextheader); +} + +sub processEntry { + my ($length,$seq,$seqid,$qual,$header) = @_; + #check that sequence and quality are same length + if(defined $qual && length($qual) && $length != length($qual)) { + &printError("The number of bases and quality scores are not the same for sequence \"$seqid\""); + } + #remove anything non-alphabetic from sequences + $seq =~ tr/a-zA-Z//cd; + $numseqs++; + $numbases += $length; + #process entry + if($exists_stats) { #calc summary stats + $seq = uc($seq); + &calcSeqStats($seq,$length,\%stats,\%kmers,\%odds,\%counts); + if(exists $params{stats_dupl}) { + push(@seqs,[$seq,$numseqs,$length]); + } + } else { #process data + &processData($seqid,$seq,$qual,$header) unless($webnoprocess); + #get graph data + if($exists_graphdata) { + $ucseq = uc($seq); + &getSeqStats(\%graphdata,$ucseq,$length); + if($qual) { + &getQualStats(\%graphdata,$qual,$length); + } + if($webstats{de} || $graphstats{de}) { + $md5 = md5_hex($ucseq); + if(exists $md5sg{$md5}) { #forward duplicate + $graphdata{dubslength}->{$length}->{0}++; + $md5sg{$md5}->{0}++; + } else { + $md5r = md5_hex(&revcompuc($ucseq)); + if(exists $md5sg{$md5r}) { #reverse duplicate + $graphdata{dubslength}->{$length}->{3}++; + $md5sg{$md5}->{3}++; + } + unless(exists $md5sg{$md5}) { + $md5sg{$md5} = {0 => 0, 3 => 0}; + } + } + } elsif($webstats{da} || $graphstats{da}) { + push(@seqs,[$ucseq,$numseqs,$length]); + } + } + } +} + +sub processEntryPairedEnd { + my ($length,$seq,$seqid,$header,$qual,$length2,$seq2,$seqid2,$header2,$qual2) = @_; + my ($tmpseq1,$tmpseq2,$tmpgood1,$tmpgood2,$tmpbegin1,$tmpend1,$tmpbegin2,$tmpend2); + $tmpgood1 = $tmpgood2 = 0; + if($length) { + #check that sequence and quality are same length + if(defined $qual && $length != length($qual)) { + &printError("The number of bases and quality scores are not the same for sequence \"$seqid\""); + } + #remove anything non-alphabetic from sequences + $seq =~ tr/a-zA-Z//cd; + $numseqs++; + $numbases += $length; + #process entry + if($exists_stats) { #calc summary stats + $seq = uc($seq); + &calcSeqStats($seq,$length,\%stats,\%kmers,\%odds,\%counts); + } else { #process data + ($tmpseq1,$tmpgood1,$tmpbegin1,$tmpend1) = &processData($seqid,$seq,$qual,$header) unless($webnoprocess); + #get graph data + if($exists_graphdata) { + $ucseq = uc($seq); + &getSeqStats(\%graphdata,$ucseq,$length); + if($qual) { + &getQualStats(\%graphdata,$qual,$length); + } + if($length2) { + $pairs++; + } + if($webstats{de} || $graphstats{de}) { + if($length2) { #both + $md5 = md5_hex($ucseq.'0'.uc($seq2)); + if(exists $md5sg{$md5}) { #forward duplicate + $md5sg{$md5}->{0}++; + $graphdata{dubslength}->{($length+$length2)}->{0}++; + } else { + $md5sg{$md5}->{0} = 0; + } + $md5 = md5_hex($ucseq); + unless(exists $md5sg{$md5}) { + $md5sg{$md5}->{0} = 0; + } + } else { #only seq, no seq2 + $md5 = md5_hex($ucseq); + if(exists $md5sg{$md5}) { #forward duplicate + $md5sg{$md5}->{0}++; + $graphdata{dubslength}->{$length}->{0}++; + } else { + $md5sg{$md5}->{0} = 0; + } + } + } + } + } + } + if($length2) { + if(defined $qual2 && $length2 != length($qual2)) { + &printError("The number of bases and quality scores are not the same for sequence \"$seqid2\""); + } + #remove anything non-alphabetic from sequences + $seq2 =~ tr/a-zA-Z//cd; + $numseqs2++; + $numbases2 += $length2; + #process entry + if($exists_stats) { #calc summary stats + $seq2 = uc($seq2); + &calcSeqStats($seq2,$length2,\%stats,\%kmers2,\%odds,\%counts2,1); #last one used to calculate stats for second input file + } else { #process data + ($tmpseq2,$tmpgood2,$tmpbegin2,$tmpend2) = &processData($seqid2,$seq2,$qual2,$header2) unless($webnoprocess); + #get graph data + if($exists_graphdata) { + $ucseq = uc($seq2); + &getSeqStats(\%graphdata2,$ucseq,$length2); + if($qual2) { + &getQualStats(\%graphdata2,$qual2,$length2); + } + if($webstats{de} || $graphstats{de}) { + #only seq2, no seq + $md5 = md5_hex($ucseq); + unless($length) { + if(exists $md5sg{$md5}) { #forward duplicate + $md5sg{$md5}->{0}++; + $graphdata{dubslength}->{$length2}->{0}++; + } else { + $md5sg{$md5}->{0} = 0; + } + } + } + } + } + } + + return if($exists_stats || $webnoprocess); + + #check for duplicates + if($derep) { + if($tmpgood1 && $tmpgood2) { + $md5 = md5_hex($tmpseq1.'0'.$tmpseq2); + if(exists $md5s{$md5}) { #forward duplicate + $md5s{$md5}++; + if($derepmin <= $md5s{$md5}+1) { + $tmpgood1 = $tmpgood2 = 0; + $filtercount{derep}++; + } + } else { + $md5s{$md5} = 0; + } + $md5 = md5_hex($tmpseq1); + unless(exists $md5s{$md5}) { + $md5s{$md5} = 0; + } + $md5 = md5_hex($tmpseq2); + unless(exists $md5s{$md5}) { + $md5s{$md5} = 0; + } + } elsif($tmpgood1) { + $md5 = md5_hex($tmpseq1); + if(exists $md5s{$md5}) { #forward duplicate + $md5s{$md5}++; + if($derepmin <= $md5s{$md5}+1) { + $tmpgood1 = 0; + $filtercount{derep}++; + } + } else { + $md5s{$md5} = 0; + } + } elsif($tmpgood2) { + $md5 = md5_hex($tmpseq2); + if(exists $md5s{$md5}) { #forward duplicate + $md5s{$md5}++; + if($derepmin <= $md5s{$md5}+1) { + $tmpgood2 = 0; + $filtercount{derep}++; + } + } else { + $md5s{$md5} = 0; + } + } + } + + #write to outputs files + if($tmpgood1) { + if(exists $params{seq_id}) { + if($mappings) { + print $fhmappings join("\t",$seqid,$params{seq_id}.$seqcount)."\n"; + } + $seqid = $params{seq_id}.$seqcount; + } + if(exists $params{rm_header}) { + $header = undef; + } + #trim if necessary + if($tmpbegin1) { + $seq = substr($seq,$tmpbegin1); + $qual = substr($qual,$tmpbegin1) if(defined $qual && length($qual)); + } + if($tmpend1) { + $length = length($seq); + $seq = substr($seq,0,$length-$tmpend1); + $qual = substr($qual,0,$length-$tmpend1) if(defined $qual && length($qual)); + } + #change case + if(exists $params{seq_case}) { + if($params{seq_case} eq 'lower') { #lower case + $seq = lc($seq); + } elsif($params{seq_case} eq 'upper') { #upper case + $seq = uc($seq); + } + } + #convert between DNA and RNA + if(exists $params{dna_rna}) { + if($params{dna_rna} eq 'dna') { #RNA to DNA + $seq =~ tr/Uu/Tt/; + } elsif($params{dna_rna} eq 'rna') { #DNA to RNA + $seq =~ tr/Tt/Uu/; + } + } + } + if($tmpgood2) { + if(exists $params{seq_id}) { + if($mappings) { + print $fhmappings join("\t",$seqid2,$params{seq_id}.$seqcount)."\n"; + } + $seqid2 = $params{seq_id}.$seqcount; + } + if(exists $params{rm_header}) { + $header2 = undef; + } + #trim if necessary + if($tmpbegin2) { + $seq2 = substr($seq2,$tmpbegin2); + $qual2 = substr($qual2,$tmpbegin2) if(defined $qual2 && length($qual2)); + } + if($tmpend2) { + $length2 = length($seq2); + $seq2 = substr($seq2,0,$length2-$tmpend2); + $qual2 = substr($qual2,0,$length2-$tmpend2) if(defined $qual2 && length($qual2)); + } + #change case + if(exists $params{seq_case}) { + if($params{seq_case} eq 'lower') { #lower case + $seq2 = lc($seq2); + } elsif($params{seq_case} eq 'upper') { #upper case + $seq2 = uc($seq2); + } + } + #convert between DNA and RNA + if(exists $params{dna_rna}) { + if($params{dna_rna} eq 'dna') { #RNA to DNA + $seq2 =~ tr/Uu/Tt/; + } elsif($params{dna_rna} eq 'rna') { #DNA to RNA + $seq2 =~ tr/Tt/Uu/; + } + } + } + if($tmpgood1 && $tmpgood2) { #pair + $seqcount++; + $seqbases += $length+$length2; + return if($nogood); + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid\" or greater number of sequences than available quality scores") unless(defined $qual); + &printError("missing quality data for sequence \"$seqid2\" or greater number of sequences than available quality scores") unless(defined $qual2); + if($stdoutgood) { + print STDOUT '@'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + print STDOUT '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print STDOUT $qual2."\n"; + } else { + print $fhgood '@'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + print $fhgood '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print $fhgood $qual."\n"; + print $fh2good '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2good $seq2."\n"; + print $fh2good '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print $fh2good $qual2."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + $seq2 =~ s/(.{$linelen})/$1\n/g; + $seq2 =~ s/\n$//; + } + if($stdoutgood) { + print STDOUT '>'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + } else { + print $fhgood '>'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + print $fh2good '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2good $seq2."\n"; + } + } + } elsif($tmpgood1) { #singleton + $seqcount1++; + $seqbases1 += $length; + return if($nogood); + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutgood) { + print STDOUT '@'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhgood2 '@'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhgood2 $seq."\n"; + print $fhgood2 '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print $fhgood2 $qual."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutgood) { + print STDOUT '>'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } else { + print $fhgood2 '>'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhgood2 $seq."\n"; + } + } + if($length2) { + $badcount2++; + $badbases2 += length($seq2); + return if($nobad); + #write data + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid2\" or greater number of sequences than available quality scores") unless(defined $qual2); + if($stdoutbad) { + print STDOUT '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print STDOUT $qual2."\n"; + } else { + print $fh2bad '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2bad $seq2."\n"; + print $fh2bad '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print $fh2bad $qual2."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq2 =~ s/(.{$linelen})/$1\n/g; + $seq2 =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + } else { + print $fh2bad '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2bad $seq2."\n"; + } + } + } + } elsif($tmpgood2) { #singleton + $seqcount2++; + $seqbases2 += $length2; + return if($nogood); + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid2\" or greater number of sequences than available quality scores") unless(defined $qual2); + if($stdoutgood) { + print STDOUT '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print STDOUT $qual2."\n"; + } else { + print $fh2good2 '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2good2 $seq2."\n"; + print $fh2good2 '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print $fh2good2 $qual2."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq2 =~ s/(.{$linelen})/$1\n/g; + $seq2 =~ s/\n$//; + } + if($stdoutgood) { + print STDOUT '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + } else { + print $fh2good2 '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2good2 $seq2."\n"; + } + } + if($length) { + $badcount++; + $badbases += length($seq); + return if($nobad); + #write data + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutbad) { + print STDOUT '@'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhbad '@'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + print $fhbad '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print $fhbad $qual."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } else { + print $fhbad '>'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + } + } + } + } else { + if($length) { + $badcount++; + $badbases += length($seq); + return if($nobad); + #write data + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutbad) { + print STDOUT '@'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhbad '@'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + print $fhbad '+'.(exists $params{no_qual_header} ? '' : $seqid.($header ? ' '.$header : ''))."\n"; + print $fhbad $qual."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$seqid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } else { + print $fhbad '>'.$seqid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + } + } + } + if($length2) { + $badcount2++; + $badbases2 += length($seq2); + return if($nobad); + #write data + if($params{out_format} == 3) { # FASTQ + &printError("missing quality data for sequence \"$seqid2\" or greater number of sequences than available quality scores") unless(defined $qual2); + if($stdoutbad) { + print STDOUT '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print STDOUT $qual2."\n"; + } else { + print $fh2bad '@'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2bad $seq2."\n"; + print $fh2bad '+'.(exists $params{no_qual_header} ? '' : $seqid2.($header2 ? ' '.$header2 : ''))."\n"; + print $fh2bad $qual2."\n"; + } + } else { #FASTA + #set line length + if($linelen) { + $seq2 =~ s/(.{$linelen})/$1\n/g; + $seq2 =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print STDOUT $seq2."\n"; + } else { + print $fh2bad '>'.$seqid2.($header2 ? ' '.$header2 : '')."\n"; + print $fh2bad $seq2."\n"; + } + } + } + } +} + +#process sequence (and qual) data +sub processData { + my ($sid,$seq,$qual,$header) = @_; + #assume sequence is good ;-) + my $good = 1; + my $seqn = uc($seq); + my $qualn = $qual; + my $begin = 0; + my $end = 0; + my ($length,$bylength,$qualsnums); + + #check for maximum number sequences requested + if(exists $params{seq_num} && $params{seq_num} <= $seqcount) { + $good = 0; + $filtercount{seq_num}++; + } + + #trim sequence ends + if($good && exists $params{trim_left}) { + $begin += $params{trim_left}; + if($begin >= length($seqn)) { + $good = 0; + $filtercount{trim_left}++; + } else { + $seqn = substr($seqn,$begin); + $qualn = substr($qualn,$begin) if(defined $qualn && length($qualn)); + } + } + if($good && exists $params{trim_right}) { + $end += $params{trim_right}; + $length = length($seqn); + if($end >= $length) { + $good = 0; + $filtercount{trim_right}++; + } else { + $seqn = substr($seqn,0,$length-$end); + $qualn = substr($qualn,0,$length-$end) if(defined $qualn && length($qualn)); + } + } + if($good && exists $params{trim_left_p}) { + $length = length($seqn); + my $begintmp = int($params{trim_left_p}/100*$length); + if($begintmp >= $length) { + $good = 0; + $filtercount{trim_left_p}++; + } else { + $seqn = substr($seqn,$begintmp); + $qualn = substr($qualn,$begintmp) if(defined $qualn && length($qualn)); + $begin += $begintmp; + } + } + if($good && exists $params{trim_right_p}) { + $length = length($seqn); + my $endtmp = int($params{trim_right_p}/100*$length); + if($endtmp >= $length) { + $good = 0; + $filtercount{trim_right_p}++; + } else { + $seqn = substr($seqn,0,$length-$endtmp); + $qualn = substr($qualn,0,$length-$endtmp) if(defined $qualn && length($qualn)); + $end += $endtmp; + } + } + + #check for quality scores + if($good && defined $qualn && $trimscore) { + my ($err); + if(exists $params{phred64}) { #scale data to Phred scale if necessary + ($qualsnums,$err) = &convertQualAsciiToNumsPhred64($qualn); + if($err) { + &printError("The sequence quality scores are not in Phred+64 format"); + } + } else { + $qualsnums = &convertQualAsciiToNums($qualn); + } + $length = length($qualn); + my $i = 0; + my $begintmp = 0; + my $endtmp = 0; + my ($window,$val); + #left + if(exists $params{trim_qual_left}) { + while($i < $length) { + #calculate maximum window + $window = ($i+$params{trim_qual_window} <= $length ? $params{trim_qual_window} : ($length-$i)); + #calculate value used to compare with given value + if($window == 1) { + $val = $qualsnums->[$i]; + } elsif($params{trim_qual_type} eq 'min') { + $val = min(@$qualsnums[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'max') { + $val = max(@$qualsnums[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'mean') { + $val = &getArrayMean(@$qualsnums[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'sum') { + last if($window < $params{trim_qual_window}); + $val = sum(@$qualsnums[$i..($i+$window-1)]); + } else { + last; + } + #compare values + if(($params{trim_qual_rule} eq 'lt' && $val < $params{trim_qual_left}) || ($params{trim_qual_rule} eq 'gt' && $val > $params{trim_qual_left}) || ($params{trim_qual_rule} eq 'et' && $val == $params{trim_qual_left})) { + $begintmp += $params{trim_qual_step}; + $i += $params{trim_qual_step}; + } else { + last; + } + } + if($begintmp >= $length) { + $good = 0; + $filtercount{trim_qual_left}++; + } elsif($begintmp > 0) { + $seqn = substr($seqn,$begintmp); + $qualn = substr($qualn,$begintmp); + $begin += $begintmp; + } + } + #right + if($good && exists $params{trim_qual_right}) { + $length -= $begintmp; + my @quals = reverse(@$qualsnums); + $i = 0; + while($i < $length) { + #calculate maximum window + $window = ($i+$params{trim_qual_window} <= $length ? $params{trim_qual_window} : ($length-$i)); + #calculate value used to compare with given value + if($window == 1) { + $val = $quals[$i]; + } elsif($params{trim_qual_type} eq 'min') { + $val = min(@quals[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'max') { + $val = max(@quals[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'mean') { + $val = &getArrayMean(@quals[$i..($i+$window-1)]); + } elsif($params{trim_qual_type} eq 'sum') { + last if($window < $params{trim_qual_window}); + $val = sum(@quals[$i..($i+$window-1)]); + } else { + last; + } + #compare values + if(($params{trim_qual_rule} eq 'lt' && $val < $params{trim_qual_right}) || ($params{trim_qual_rule} eq 'gt' && $val > $params{trim_qual_right}) || ($params{trim_qual_rule} eq 'et' && $val == $params{trim_qual_right})) { + $endtmp += $params{trim_qual_step}; + $i += $params{trim_qual_step}; + } else { + last; + } + } + if($endtmp >= $length) { + $good = 0; + $filtercount{trim_qual_right}++; + } elsif($endtmp > 0) { + $seqn = substr($seqn,0,$length-$endtmp); + $qualn = substr($qualn,0,$length-$endtmp); + $end += $endtmp; + } + } + } + + #check for tails with min trimtails char repeats + if($good && exists $params{trim_tail_left}) { + $length = length($seqn); + my $begintmp = 0; + if($seqn =~ $repAleft || $seqn =~ $repTleft) { + my @tmp = split('',$seqn); + my $tmpchar = $tmp[0]; #A or T + $begintmp += $params{trim_tail_left}; + foreach ($params{trim_tail_left}..$length-1) { + last unless($tmp[$_] eq $tmpchar || $tmp[$_] eq 'N'); + $begintmp++; + } + if($begintmp >= $length) { + $good = 0; + $filtercount{trim_tail_left}++; + } else { + $seqn = substr($seqn,$begintmp); + $qualn = substr($qualn,$begintmp) if(defined $qualn && length($qualn)); + $length = length($seqn); + $begin += $begintmp; + } + } + } + if($good && exists $params{trim_tail_right}) { + $length = length($seqn); + my $endtmp = 0; + if($seqn =~ $repAright || $seqn =~ $repTright) { + my @tmp = split('',$seqn); + my $tmpchar = $tmp[$length-1]; #A or T + $endtmp += $params{trim_tail_right}; + foreach (reverse 0..$length-$params{trim_tail_right}-1) { + last unless($tmp[$_] eq $tmpchar || $tmp[$_] eq 'N'); + $endtmp++; + } + if($endtmp >= $length) { + $good = 0; + $filtercount{trim_tail_right}++; + } else { + $seqn = substr($seqn,0,$length-$endtmp); + $qualn = substr($qualn,0,$length-$endtmp) if(defined $qualn && length($qualn)); + $end += $endtmp; + } + } + } + if($good && exists $params{trim_ns_left}) { + $length = length($seqn); + my $begintmp = 0; + if($seqn =~ $repNleft) { + my @tmp = split('',$seqn); + $begintmp += $params{trim_ns_left}; + foreach ($params{trim_ns_left}..$length-1) { + last unless($tmp[$_] eq 'N'); + $begintmp++; + } + if($begintmp >= $length) { + $good = 0; + $filtercount{trim_ns_left}++; + } else { + $seqn = substr($seqn,$begintmp); + $qualn = substr($qualn,$begintmp) if(defined $qualn && length($qualn)); + $length = length($seqn); + $begin += $begintmp; + } + } + } + if($good && exists $params{trim_ns_right}) { + $length = length($seqn); + my $endtmp = 0; + if($seqn =~ $repNright) { + my @tmp = split('',$seqn); + $endtmp += $params{trim_ns_right}; + foreach (reverse 0..$length-$params{trim_ns_right}-1) { + last unless($tmp[$_] eq 'N'); + $endtmp++; + } + if($endtmp >= $length) { + $good = 0; + $filtercount{trim_ns_right}++; + } else { + $seqn = substr($seqn,0,$length-$endtmp); + $qualn = substr($qualn,0,$length-$endtmp) if(defined $qualn && length($qualn)); + $end += $endtmp; + } + } + } + + #check if trim to certain length + $length = length($seqn); + if($good && exists $params{trim_to_len} && $length > $params{trim_to_len}) { + $seqn = substr($seqn,0,$params{trim_to_len}); + $qualn = substr($qualn,0,$params{trim_to_len}) if(defined $qualn && length($qualn)); + $end += ($length-$params{trim_to_len}); + } + + #check for sequence length + $length = length($seqn); + $bylength = ($length ? 100/$length : 0); + if($bylength == 0) { + $good = 0; + $filtercount{zero_length}++; + } + if($good && exists $params{min_len} && $length < $params{min_len}) { + $good = 0; + $filtercount{min_len}++; + } + if($good && exists $params{max_len} && $length > $params{max_len}) { + $good = 0; + $filtercount{max_len}++; + } + if($good && exists $params{range_len} && !&checkRange($params{range_len},$length)) { + $good = 0; + $filtercount{range_len}++; + } + + #check for quality scores + if($good && defined $qualn && (exists $params{min_qual_score} || exists $params{max_qual_score} || exists $params{min_qual_mean} || exists $params{max_qual_mean})) { + my ($err); + if($qualsnums) { + if($begin > 0) { + shift(@$qualsnums) foreach(1..$begin); + } + if($end > 0) { + pop(@$qualsnums) foreach(1..$end); + } + } else { + if(exists $params{phred64}) { #scale data to Phred scale if necessary + ($qualsnums,$err) = &convertQualAsciiToNumsPhred64($qualn); + if($err) { + &printError("The sequence quality scores are not in Phred+64 format"); + } + } else { + $qualsnums = &convertQualAsciiToNums($qualn); + } + } + if($good && exists $params{min_qual_score} && min(@$qualsnums) < $params{min_qual_score}) { + $good = 0; + $filtercount{min_qual_score}++; + } + if($good && exists $params{max_qual_score} && max(@$qualsnums) < $params{max_qual_score}) { + $good = 0; + $filtercount{max_qual_score}++; + } + if($good && exists $params{min_qual_mean} && &getArrayMean(@$qualsnums) < $params{min_qual_mean}) { + $good = 0; + $filtercount{min_qual_mean}++; + } + if($good && exists $params{max_qual_mean} && &getArrayMean(@$qualsnums) < $params{max_qual_mean}) { + $good = 0; + $filtercount{max_qual_mean}++; + } + } + + #check for GC content + if($good && (exists $params{min_gc} || exists $params{max_gc} || exists $params{range_gc})) { + my $gc = ($seqn =~ tr/GC//); + $gc = sprintf("%d",$gc*$bylength); + if(exists $params{min_gc} && $gc < $params{min_gc}) { + $good = 0; + $filtercount{min_gc}++; + } + if($good && exists $params{max_gc} && $gc > $params{max_gc}) { + $good = 0; + $filtercount{max_gc}++; + } + if($good && exists $params{range_gc} && !&checkRange($params{range_gc},$gc)) { + $good = 0; + $filtercount{range_gc}++; + } + } + + #check for N's in sequence + if($good && (exists $params{ns_max_p} || exists $params{ns_max_n})) { + my $ns = ($seqn =~ tr/N//); + if(exists $params{ns_max_p} && ($ns*$bylength) > $params{ns_max_p}) { + $good = 0; + $filtercount{ns_max_p}++; + } + if($good && exists $params{ns_max_n} && $ns > $params{ns_max_n}) { + $good = 0; + $filtercount{ns_max_n}++; + } + } + + #check for non IUPAC chars in sequence + if($good && exists $params{noniupac} && $seqn =~ /[^ACGTN]/o) { + $good = 0; + $filtercount{noniupac}++; + } + + #check for additional filter parameters + if($good && @cps) { + foreach my $p (@cps) { + if($p->[0]) { #repeats + if(index($seqn,$p->[1]x$p->[2]) != -1) { + $good = 0; + $filtercount{custom_params}++; + last; + } + } else { #percentage + my $ns = 0; + my $v = $p->[1]; + $ns++ while($seqn =~ /$v/g); + if((100*$ns/$length) > $p->[2]) { + $good = 0; + $filtercount{custom_params}++; + last; + } + } + } + } + + #check for sequence complexity + if($good && defined $complval) { + my ($rest,$steps,@vals,$str,$num,$bynum); + if($length <= $WINDOWSIZE) { + $rest = $length; + $steps = 0; + } else { + $steps = int(($length - $WINDOWSIZE) / $WINDOWSTEP) + 1; + $rest = $length - $steps * $WINDOWSTEP; + unless($rest > $WINDOWSTEP) { + $rest += $WINDOWSTEP; + $steps--; + } + } + $num = $WINDOWSIZE-2; + $bynum = 1/$num; + $num--; + my $mean = 0; + if($params{lc_method} eq 'dust') { + my $dustscore; + foreach my $i (0..$steps-1) { + $str = substr($seqn,($i * $WINDOWSTEP),$WINDOWSIZE); + %counts = (); + foreach my $i (@WINDOWSIZEARRAY) { + $counts{substr($str,$i,3)}++; + } + $dustscore = 0; + foreach(values %counts) { + $dustscore += ($_ * ($_ - 1) * $POINTFIVE); + } + push(@vals,($dustscore * $bynum)); + } + #last step + if($rest > 5) { + $str = substr($seqn,($steps * $WINDOWSTEP),$rest); + %counts = (); + $num = $rest-2; + foreach my $i (0..($num - 1)) { + $counts{substr($str,$i,3)}++; + } + $dustscore = 0; + foreach(values %counts) { + $dustscore += ($_ * ($_ - 1) * $POINTFIVE); + } + push(@vals,(($dustscore / ($num-1)) * (($WINDOWSIZE - 2) / $num))); + } else { + push(@vals,31); #to assign a maximum score based on the scaling factor 100/31 + } + $mean = &getArrayMean(@vals); + if(int($mean * 100 / 31) > $complval) { + $good = 0; + $filtercount{lc_method}++; + } + } elsif($params{lc_method} eq 'entropy') { + my $entropyval; + foreach my $i (0..$steps-1) { + $str = substr($seqn,($i * $WINDOWSTEP),$WINDOWSIZE); + %counts = (); + foreach my $i (@WINDOWSIZEARRAY) { + $counts{substr($str,$i,3)}++; + } + $entropyval = 0; + foreach(values %counts) { + $entropyval -= ($_ * $bynum) * log($_ * $bynum); + } + push(@vals,($entropyval * $ONEOVERLOG62)); + } + #last step + if($rest > 5) { + $str = substr($seqn,($steps * $WINDOWSTEP),$rest); + %counts = (); + $num = $rest-2; + foreach my $i (0..($num - 1)) { + $counts{substr($str,$i,3)}++; + } + $entropyval = 0; + $bynum = 1/$num; + foreach(values %counts) { + $entropyval -= ($_ * $bynum) * log($_ * $bynum); + } + push(@vals,($entropyval / log($num))); + } else { + push(@vals,0); + } + $mean = &getArrayMean(@vals); + if(int($mean * 100) < $complval) { + $good = 0; + $filtercount{lc_method}++; + } + } + } + + #stop here for paired-end reads + if($file2) { + return ($seqn,$good,$begin,$end); + } + + #check for read duplicates + if($good && $derep) { + if($exactonly) { + $md5 = md5_hex($seqn); + if(exists $dereptypes{0}) { + if(exists $md5s{$md5}) { #forward duplicate + $md5s{$md5}->{0}++; + if($derepmin <= $md5s{$md5}->{0}+1) { + $good = 0; + $filtercount{derep}++; + } + } + } + if($good && exists $dereptypes{3}) { + $md5r = md5_hex(&revcompuc($seqn)); + if(exists $md5s{$md5r}) { #reverse duplicate + $md5s{$md5}->{3}++; + if($derepmin <= $md5s{$md5}->{3}+1) { + $good = 0; + $filtercount{derep}++; + } + } + } + unless(exists $md5s{$md5}) { + $md5s{$md5} = {0 => 0, 3 => 0}; + } + } else { + push(@seqsP,[$seqn,$goodcount++,$length]); + #keep write data for possible duplicates + if($params{out_format} == 1) { #FASTA + push(@printtmp,[$sid,$header,$seq,$begin,$end,'']); + } else { # FASTQ or FASTA+QUAL or FASTQ+FASTA or FASTQ+FASTA+QUAL + push(@printtmp,[$sid,$header,$seq,$begin,$end,$qual]); + } + } + } + + if($good && (($derep && $exactonly) || !$derep)) { #passed filters + $seqcount++; + $seqbases += $length; + return if($nogood); + #check if change of sequence ID + if(exists $params{seq_id}) { + if($mappings) { + print $fhmappings join("\t",$sid,$params{seq_id}.$seqcount)."\n"; + } + $sid = $params{seq_id}.$seqcount; + } + if(exists $params{rm_header}) { + $header = undef; + } + #trim if necessary + if($begin) { + $seq = substr($seq,$begin); + $qual = substr($qual,$begin) if(defined $qual && length($qual)); + } + if($end) { + $length = length($seq); + $seq = substr($seq,0,$length-$end); + $qual = substr($qual,0,$length-$end) if(defined $qual && length($qual)); + } + #change case + if(exists $params{seq_case}) { + if($params{seq_case} eq 'lower') { #lower case + $seq = lc($seq); + } elsif($params{seq_case} eq 'upper') { #upper case + $seq = uc($seq); + } + } + #convert between DNA and RNA + if(exists $params{dna_rna}) { + if($params{dna_rna} eq 'dna') { #RNA to DNA + $seq =~ tr/Uu/Tt/; + } elsif($params{dna_rna} eq 'rna') { #DNA to RNA + $seq =~ tr/Tt/Uu/; + } + } + #write data + if($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5) { # FASTQ + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutgood) { + print STDOUT '@'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhgood '@'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + print $fhgood '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print $fhgood $qual."\n"; + } + } + if($params{out_format} == 1 || $params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5) { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutgood) { + print STDOUT '>'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } elsif($params{out_format} == 1 || $params{out_format} == 2) { + print $fhgood '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + } else { + print $fhgood3 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood3 $seq."\n"; + } + } + if($params{out_format} == 2 || $params{out_format} == 5) { #QUAL + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + print $fhgood2 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood2 &convertQualArrayToString(&convertQualAsciiToNums($qual),$linelen)."\n"; + } + } elsif($good && $derep && !$exactonly) { + #do nothing as sequences will be used for duplicate check + } else { #filtered out + $badcount++; + $badbases += length($seq); + return if($nobad); + #write data + if($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5) { # FASTQ + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutbad) { + print STDOUT '@'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhbad '@'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + print $fhbad '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print $fhbad $qual."\n"; + } + } + if($params{out_format} == 1 || $params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5) { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } elsif($params{out_format} == 1 || $params{out_format} == 2) { + print $fhbad '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + } else { + print $fhbad3 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad3 $seq."\n"; + } + } + if($params{out_format} == 2 || $params{out_format} == 5) { #QUAL + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + print $fhbad2 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad2 &convertQualArrayToString(&convertQualAsciiToNums($qual),$linelen)."\n"; + } + } +} + +#dereplicate sequences +sub derepSeqs { + my $numseqs = scalar(@seqsP); + if($derep && $numseqs) { + my ($sid,$seq,$qual,$header,$begin,$end); + my ($dcounts,undef,$dupls) = &checkForDupl(\@seqsP,\%dereptypes,$numseqs); + + print STDERR "Write results to output file(s)\n" if(exists $params{verbose}); + #for progress bar + my $progress = 0; + my $counter = 1; + my $part = int($numseqs/100); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + + foreach my $i (0..$numseqs-1) { + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + } + #get data + $sid = $printtmp[$i]->[0]; + $seq = $printtmp[$i]->[2]; + $qual = $printtmp[$i]->[5]; + $header = $printtmp[$i]->[1]; + $begin = $printtmp[$i]->[3]; + $end = $printtmp[$i]->[4]; + #write data + if(exists $dupls->{$i} || (exists $params{seq_num} && $params{seq_num} <= $seqcount)) { #bad + $filtercount{derep}++; + $badcount++; + $badbases += length($seq); + next if($nobad); + #write data + if($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5) { # FASTQ + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutbad) { + print STDOUT '@'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhbad '@'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + print $fhbad '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print $fhbad $qual."\n"; + } + } + if($params{out_format} == 1 || $params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5) { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutbad) { + print STDOUT '>'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } elsif($params{out_format} == 1 || $params{out_format} == 2) { + print $fhbad '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad $seq."\n"; + } else { + print $fhbad3 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad3 $seq."\n"; + } + } + if($params{out_format} == 2 || $params{out_format} == 5) { #QUAL + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + print $fhbad2 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhbad2 &convertQualArrayToString(&convertQualAsciiToNums($qual),$linelen)."\n"; + } + } else { #good + $seqcount++; + $seqbases += (length($seq)-$begin-$end); + next if($nogood); + #check if change of sequence ID + if(exists $params{seq_id}) { + if($mappings) { + print $fhmappings join("\t",$sid,$params{seq_id}.$seqcount)."\n"; + } + $sid = $params{seq_id}.$seqcount; + } + if(exists $params{rm_header}) { + $header = undef; + } + #trim if necessary + if($begin) { + $seq = substr($seq,$begin); + $qual = substr($qual,$begin) if(defined $qual && length($qual)); + } + if($end) { + $length = length($seq); + $seq = substr($seq,0,$length-$end); + $qual = substr($qual,0,$length-$end) if(defined $qual && length($qual)); + } + #change case + if(exists $params{seq_case}) { + if($params{seq_case} eq 'lower') { #lower case + $seq = lc($seq); + } elsif($params{seq_case} eq 'upper') { #upper case + $seq = uc($seq); + } + } + #convert between DNA and RNA + if(exists $params{dna_rna}) { + if($params{dna_rna} eq 'dna') { #RNA to DNA + $seq =~ tr/Uu/Tt/; + } elsif($params{dna_rna} eq 'rna') { #DNA to RNA + $seq =~ tr/Tt/Uu/; + } + } + #write data + if($params{out_format} == 3 || $params{out_format} == 4 || $params{out_format} == 5) { # FASTQ + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + if($stdoutgood) { + print STDOUT '@'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + print STDOUT '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print STDOUT $qual."\n"; + } else { + print $fhgood '@'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + print $fhgood '+'.(exists $params{no_qual_header} ? '' : $sid.($header ? ' '.$header : ''))."\n"; + print $fhgood $qual."\n"; + } + } + if($params{out_format} == 1 || $params{out_format} == 2 || $params{out_format} == 4 || $params{out_format} == 5) { #FASTA + #set line length + if($linelen) { + $seq =~ s/(.{$linelen})/$1\n/g; + $seq =~ s/\n$//; + } + if($stdoutgood) { + print STDOUT '>'.$sid.($header ? ' '.$header : '')."\n"; + print STDOUT $seq."\n"; + } elsif($params{out_format} == 1 || $params{out_format} == 2) { + print $fhgood '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood $seq."\n"; + } else { + print $fhgood3 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood3 $seq."\n"; + } + } + if($params{out_format} == 2 || $params{out_format} == 5) { #QUAL + &printError("missing quality data for sequence \"$sid\" or greater number of sequences than available quality scores") unless(defined $qual); + print $fhgood2 '>'.$sid.($header ? ' '.$header : '')."\n"; + print $fhgood2 &convertQualArrayToString(&convertQualAsciiToNums($qual),$linelen)."\n"; + } + } + } + print STDERR "\r\tdone \n" if(exists $params{verbose}); + } +} + +#calculate summary statistics from sequences +sub calcSeqStats { + my ($seq,$length,$stats,$kmers,$odds,$counts,$pair) = @_; + + #length related: min, max, range, mean, stddev, mode + if(exists $params{stats_len} || exists $params{stats_assembly}) { + $counts->{length}->{$length}++; + } + + #dinucleotide odds ratio related: aatt, acgt, agct, at, catg, ccgg, cg, gatc, gc, ta + if(exists $params{stats_dinuc}) { + &dinucOdds($seq,$length,$odds); + } + + #tag related: probability of 5' and 3' tag sequence based on kmer counts + if(exists $params{stats_tag}) { + #get kmers + if($length >= 5) { + #get 5' and 3' ends + my $str5 = substr($seq,0,5); + my $str3 = substr($seq,$length-5); + unless($str5 eq 'AAAAA' || $str5 eq 'TTTTT' || $str5 eq 'CCCCC' || $str5 eq 'GGGGG' || $str5 eq 'NNNNN') { + $kmers->{5}->{$str5}++; + } + unless($str3 eq 'AAAAA' || $str3 eq 'TTTTT' || $str3 eq 'CCCCC' || $str3 eq 'GGGGG' || $str3 eq 'NNNNN') { + $kmers->{3}->{$str3}++; + } + } + #check for MID tags + if($length >= $MIDCHECKLENGTH) { + my $str5 = substr($seq,0,$MIDCHECKLENGTH); + foreach my $mid (keys %MIDS) { + if(index($str5,$mid) != -1) { + $MIDS{$mid}++; + last; + } + } + } + } + + #ambiguous base N related: seqswithn, maxp + if(exists $params{stats_ns}) { + my $bylength = 100/$length; + my $ns = ($seq =~ tr/N//); + if($pair) { + $stats->{stats_ns2}->{seqswithn}++ if($ns > 0); + $stats->{stats_ns2}->{maxn} = $ns if($ns > ($stats->{stats_ns2}->{maxn}||0)); + $ns = ($ns > 0 && $ns*$bylength < 1 ? 1 : sprintf("%d",$ns*$bylength)); + $stats->{stats_ns2}->{maxp} = $ns if($ns > ($stats->{stats_ns2}->{maxp}||0)); + } else { + $stats->{stats_ns}->{seqswithn}++ if($ns > 0); + $stats->{stats_ns}->{maxn} = $ns if($ns > ($stats->{stats_ns}->{maxn}||0)); + $ns = ($ns > 0 && $ns*$bylength < 1 ? 1 : sprintf("%d",$ns*$bylength)); + $stats->{stats_ns}->{maxp} = $ns if($ns > ($stats->{stats_ns}->{maxp}||0)); + } + } +} + +#dinucleotide odds ratio calculation +sub dinucOdds { + my ($seq,$length,$odds) = @_; + my ($mononum,$dinum,$i,$x,$y); + my %di = %DN_DI; + my (%mono,$lengthtmp); + my @tmp = split(/N+/,$seq); + foreach(@tmp) { + $lengthtmp = length($_)-1; + next unless($lengthtmp > 0); + $mono{AT} += ($_ =~ tr/AT//); + $mono{GC} += ($_ =~ tr/GC//); + $i = 0; + while($i < $lengthtmp) { + $di{substr($_,$i++,2)}++; + } + } + $dinum = sum(values %di); + + if($dinum) { + $mononum = sum(values %mono); + my $factor = 2 * $mononum * $mononum / $dinum; + my $AT = $mono{AT}; + my $GC = $mono{GC}; + if($AT) { + my $AT2 = $factor / ($AT * $AT); + $odds->{'AATT'} += ($di{'AA'} + $di{'TT'}) * $AT2; + $odds->{'AT'} += 2 * $di{'AT'} * $AT2; + $odds->{'TA'} += 2 * $di{'TA'} * $AT2; + if($GC) { + my $ATGC = $factor / ($AT * $GC); + $odds->{'ACGT'} += ($di{'AC'} + $di{'GT'}) * $ATGC; + $odds->{'AGCT'} += ($di{'AG'} + $di{'CT'}) * $ATGC; + $odds->{'CATG'} += ($di{'CA'} + $di{'TG'}) * $ATGC; + $odds->{'GATC'} += ($di{'GA'} + $di{'TC'}) * $ATGC; + my $GC2 = $factor / ($GC * $GC); + $odds->{'CCGG'} += ($di{'CC'} + $di{'GG'}) * $GC2; + $odds->{'CG'} += 2 * $di{'CG'} * $GC2; + $odds->{'GC'} += 2 * $di{'GC'} * $GC2; + } + } elsif($GC) { + my $GC2 = $factor / ($GC * $GC); + $odds->{'CCGG'} += ($di{'CC'} + $di{'GG'}) * $GC2; + $odds->{'CG'} += 2 * $di{'CG'} * $GC2; + $odds->{'GC'} += 2 * $di{'GC'} * $GC2; + } + } +} + +#calculate basic stats from an hash of number->count values +sub generateStats { + my $counts = shift; + my ($min,$max,$modeval,$mode,$mean,$count,$std,$x,$c,@vals,$num,$median,%stats); + + #min, max, mode and modeval + $min = -1; + $max = $modeval = $mean = $count = $std = $num = 0; + while (($x, $c) = each(%$counts)) { + if($min == -1) { + $min = $x; + } elsif($min > $x) { + $min = $x; + } + if($max < $x) { + $max = $x; + } + if($modeval < $c) { + $modeval = $c; + $mode = $x; + } + $mean += $x*$c; + $count += $c; + foreach(1..$c) { + push(@vals,$x); + $num++; + } + } + + #mean and stddev + $mean /= $count; + while (($x, $c) = each(%$counts)) { + $std += $c*(($x-$mean)**2); + } + + #median + if($num == 1) { + $median = $vals[0]; + } elsif($num == 2) { + $median = ($vals[0]+$vals[1])/2; + } else { + @vals = sort {$a <=> $b} @vals; + if($num % 2) { + $median = $vals[($num-1)/2]; + } else { + $median = ($vals[$num/2]+$vals[$num/2-1])/2; + } + } + + #save stats + $stats{min} = $min; + $stats{max} = $max; + $stats{range} = $max-$min+1; + $stats{modeval} = $modeval; + $stats{mode} = $mode; + $stats{mean} = sprintf("%.2f",$mean); + $stats{stddev} = sprintf("%.2f",($std/$count)**(1/2)); + $stats{median} = $median; + + return \%stats; +} + +sub generateStatsType { + my $counts = shift; + my (%stats,$min,$max,$modeval,$mode,$mean,$std,$x,$c,@vals,$num,$median,$p25,$p75,$numq,$i,$j,$median1,$median2,$p251,$p252,$p751,$p752); + + foreach my $kind (keys %$counts) { + @vals = (); + $min = -1; + $max = $modeval = $mean = $std = $num = 0; + foreach my $x1 (sort {$a <=> $b} keys %{$counts->{$kind}}) { + $c = $counts->{$kind}->{$x1}; + if($min == -1) { + $min = $x1; + } + if($max < $x1) { + $max = $x1; + } + if($modeval < $c) { + $modeval = $c; + $mode = $x1; + } + $mean += $x1*$c; + $num += $c; + push(@vals,[$c,$x1]); #count, values + } + + $mean /= $num; + while (($x, $c) = each(%{$counts->{$kind}})) { + $std += $c*(($x-$mean)**2); + } + + if($num == 1) { + $median = $p25 = $p75 = $vals[0]->[1]; + } elsif($num == 2) { + if($vals[0]->[0] == 1) { #two different numbers + $p25 = $vals[0]->[1]; + $p75 = $vals[1]->[1]; + $median = ($vals[0]->[1]+$vals[1]->[1])/2; + } else { + $p25 = $p75 = $median = $vals[0]->[1]; #both same + } + } elsif($num > 2) { + if($num % 2) { + $i = 0; + $j = 0; + while($i <= ($num-1)/2) { + $median = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $numq = ($num+1)/2; + } else { + $i = 0; + $j = 0; + while($i <= ($num/2-1)) { + $median1 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $median2 = $median1; + while($i <= ($num/2)) { + $median2 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $median = ($median1 + $median2)/2; + $numq = $num/2; + } + if($numq % 2) { + $i = 0; + $j = 0; + while($i <= (($numq-1)/2)) { + $p25 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $p75 = $p25; + while($i <= ($num-($numq-1)/2-1)) { + $p75 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + } else { + $i = 0; + $j = 0; + while($i <= ($numq/2-1)) { + $p251 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $p252 = $p251; + while($i <= ($numq/2)) { + $p252 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $p751 = $p252; + while($i <= ($num-$numq/2-1)) { + $p751 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $p752 = $p751; + while($i <= ($num-$numq/2)) { + $p752 = $vals[$j]->[1]; + $i += $vals[$j]->[0]; + $j++; + } + $p25 = ($p251 + $p252) / 2; + $p75 = ($p751 + $p752) / 2; + } + } else { + $median = $p25 = $p75 = 0; + } + + $stats{$kind}->{min} = $min; + $stats{$kind}->{max} = $max; + $stats{$kind}->{range} = $max-$min+1; + $stats{$kind}->{modeval} = $modeval; + $stats{$kind}->{mode} = $mode; + $stats{$kind}->{mean} = sprintf("%.2f",$mean); + $stats{$kind}->{std} = sprintf("%.2f",($std/$num)**(1/2)); + $stats{$kind}->{median} = int($median); + $stats{$kind}->{p25} = int($p25); + $stats{$kind}->{p75} = int($p75); + } + + return \%stats; +} + +#requires seqs array with [upper-case seq, array index, length] for each entry +sub checkForDupl { + #requires seqs array with [upper-case seq, array index, length] for each entry + my ($seqs,$types,$numseqs) = @_; + my (@sort,$num,%dupls,$pretype,$precount,%counts,%lens); + #precount = number duplicates for the same sequence + + print STDERR "Check for duplicates\n" if(exists $params{verbose}); + + #for progress bar + my $progress = 1; + my $counter = 1; + my $part = int($numseqs*4/100); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: duplicate-status $progress"); + + #exact duplicates and prefix duplicates + if(exists $types->{0} || exists $types->{1} || exists $types->{2}) { + $precount = 0; + $pretype = -1; + @sort = sort {$a->[0] cmp $b->[0]} @$seqs; + foreach my $i (0..$numseqs-2) { + if(exists $types->{0} && $sort[$i]->[2] == $sort[$i+1]->[2] && $sort[$i]->[0] eq $sort[$i+1]->[0]) { + $dupls{$sort[$i]->[1]} = 0; + $lens{$sort[$i]->[2]}->{0}++; + if($pretype == 0) { + $precount++; + } else { + if($pretype == 1 && $precount) { + $counts{$precount}->{$pretype}++; + } + $pretype = 0; + $precount = 1; + } + } elsif(exists $types->{1} && $sort[$i]->[2] < $sort[$i+1]->[2] && $sort[$i]->[0] eq substr($sort[$i+1]->[0],0,$sort[$i]->[2])) { + $dupls{$sort[$i]->[1]} = 1; + $lens{$sort[$i]->[2]}->{1}++; + if($pretype == 1) { + $precount++; + } else { + if($pretype == 0 && $precount) { + $counts{$precount}->{$pretype}++; + } + $pretype = 1; + $precount = 1; + } + } else { + if($precount) { + $counts{$precount}->{$pretype}++; + $precount = 0; + } + $pretype = -1; + } + $sort[$i] = undef; + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: duplicate-status $progress"); + } + } + if($precount) { + $counts{$precount}->{$pretype}++; + } + } + #suffix duplicates + if(exists $types->{2}) { + $num = 0; + @sort = (); + foreach(@$seqs) { + next if(exists $dupls{$_->[1]}); + push(@sort,[(scalar reverse $_->[0]),$_->[1],$_->[2]]); + $num++; + } + if($num > 1) { + $precount = 0; + $pretype = -1; + @sort = sort {$a->[0] cmp $b->[0]} @sort; + foreach my $i (0..$num-2) { + if($sort[$i]->[2] < $sort[$i+1]->[2] && $sort[$i]->[0] eq substr($sort[$i+1]->[0],0,$sort[$i]->[2])) { + $dupls{$sort[$i]->[1]} = 2; + $lens{$sort[$i]->[2]}->{2}++; + if($pretype == 2) { + $precount++; + } else { + $pretype = 2; + $precount = 1; + } + } else { + if($precount) { + $counts{$precount}->{$pretype}++; + $precount = 0; + } + $pretype = -1; + } + $sort[$i] = undef; + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: duplicate-status $progress"); + } + } + if($precount) { + $counts{$precount}->{$pretype}++; + } + } + } + #reverse complement exact and prefix/suffix duplicates + if(exists $types->{3} || exists $types->{4}) { + $num = 0; + @sort = (); + foreach(@$seqs) { + if(exists $dupls{$_->[1]}) { + $counter++; + next; + } + push(@sort,[$_->[0],$_->[1],$_->[2],0]); + push(@sort,[&revcompuc($_->[0]),$_->[1],$_->[2],1]); + $num += 2; + } + if($num > 1) { + $precount = 0; + $pretype = -1; + @sort = sort {$a->[0] cmp $b->[0]} @sort; + foreach my $i (0..$num-2) { + unless($sort[$i]->[3] == $sort[$i+1]->[3] || $sort[$i]->[1] eq $sort[$i+1]->[1] || exists $dupls{$sort[$i]->[1]}) { #don't check if both same (original or revcomp) or already counted as dubs + if(exists $types->{3} && $sort[$i]->[2] == $sort[$i+1]->[2] && $sort[$i]->[0] eq $sort[$i+1]->[0]) { + $dupls{$sort[$i]->[1]} = 3; + $lens{$sort[$i]->[2]}->{3}++; + if($pretype == 3) { + $precount++; + } else { + if($pretype == 4 && $precount) { + $counts{$precount}->{$pretype}++; + } + $pretype = 3; + $precount = 1; + } + } elsif(exists $types->{4} && $sort[$i]->[2] < $sort[$i+1]->[2] && $sort[$i]->[0] eq substr($sort[$i+1]->[0],0,$sort[$i]->[2])) { + $dupls{$sort[$i]->[1]} = 4; + $lens{$sort[$i]->[2]}->{4}++; + if($pretype == 4) { + $precount++; + } else { + if($pretype == 3 && $precount) { + $counts{$precount}->{$pretype}++; + } + $pretype = 4; + $precount = 1; + } + } else { + if($precount) { + $counts{$precount}->{$pretype}++; + $precount = 0; + } + $pretype = -1; + } + } + $sort[$i] = undef; + #progress bar stuff + $counter++; + if($counter > $part) { + $counter = 1; + $progress++; + $progress = 99 if($progress > 99); + print STDERR "\r\tstatus: ".int($progress)." \%" if(exists $params{verbose}); + &printWeb("STATUS: duplicate-status $progress"); + } + } + if($precount) { + $counts{$precount}->{$pretype}++; + } + } + } + print STDERR "\r\tdone \n" if(exists $params{verbose}); + &printWeb("STATUS: duplicate-status 100"); + return (\%counts,\%lens,\%dupls); +} + +#get the frequency of possible tags by shifting kmers by max 2 positions when aligned +sub getTagFrequency { + my ($kmers) = @_; + + #find most abundant kmer counts + my $percentone = $numseqs/100; + my $percentten = $numseqs/10; + my %most; + foreach my $sp (keys %$kmers) { + $most{$sp}->{max} = 0; + foreach(keys %{$kmers->{$sp}}) { +# next if($_ eq 'A'x5 || $_ eq 'T'x5 || $_ eq 'C'x5 || $_ eq 'G'x5 || $_ eq 'N'x5); + if($kmers->{$sp}->{$_} >= $percentten) { + $most{$sp}->{ten}++; + } elsif($kmers->{$sp}->{$_} >= $percentone) { + $most{$sp}->{one}++; + } + #get max count + $most{$sp}->{max} = $kmers->{$sp}->{$_} if($most{$sp}->{max} < $kmers->{$sp}->{$_}); + } + } + + #filter kmers by frequency - threshold of >10% occurrence -> max of 9 different kmers or more if there is non with >10% occurrence + my $numseqssub = $numseqs/10; + my $onecount = 2; + foreach my $sp (keys %$kmers) { + foreach(keys %{$kmers->{$sp}}) { + if(exists $most{$sp}->{ten} && $most{$sp}->{ten} > 0) { + delete $kmers->{$sp}->{$_} if($kmers->{$sp}->{$_} < $percentten); + } elsif(exists $most{$sp}->{one} && $most{$sp}->{one} > 0) { + delete $kmers->{$sp}->{$_} if($kmers->{$sp}->{$_} < $percentone); + } else { + delete $kmers->{$sp}->{$_} if($kmers->{$sp}->{$_} != $most{$sp}->{max}); + } + } + } + + my (%kmersum,%kmershift); + foreach my $sp (sort {$b <=> $a} keys %$kmers) { #5' before 3' + #if more than one kmer in array, test if shifted by max 2 positions + my $numkmer = scalar(keys %{$kmers->{$sp}}); + + if($numkmer > 1) { + my @matrix; + my @kmersort = sort {$kmers->{$sp}->{$b} <=> $kmers->{$sp}->{$a}} keys %{$kmers->{$sp}}; + foreach my $i (0..($numkmer-2)) { + foreach my $j (($i+1)..($numkmer-1)) { + $matrix[$i]->[$j-($i+1)] = &align2seqs($kmersort[$j],$kmersort[$i]); + } + } + my $countgood = 0; + foreach my $i (0..($numkmer-2)) { + unless(@{$matrix[0]->[$i]}) { #not matching + my $count = 0; + foreach my $j (1..($numkmer-2)) { + $count++; + last if(defined $matrix[$j]->[$i-$j]); #found shift using other kmers + } + if($count < ($numkmer-1) && $i > 0) { + my $sum = 0; + my $sign; + foreach my $j (0..$count) { + next unless(defined $matrix[$j] && defined $matrix[$j]->[$i-1]); #fix: 08/2010 + if(defined $sign) { + if(($sign < 0 && (defined $matrix[$j]->[$i-1]->[0] && $matrix[$j]->[$i-1]->[0] < 0)) || ($sign > 0 && (defined $matrix[$j]->[$i-1]->[0] && $matrix[$j]->[$i-1]->[0] > 0))) { + $sum += $matrix[$j]->[$i-1]->[0]; + } elsif(($sign < 0 && (defined $matrix[$j]->[$i-1]->[1] && $matrix[$j]->[$i-1]->[1] < 0)) || $sign > 0 && (defined $matrix[$j]->[$i-1]->[1] && $matrix[$j]->[$i-1]->[1] > 0)) { + $sum += $matrix[$j]->[$i-1]->[1]; + } + } elsif(defined $matrix[$j]->[$i-1]->[0]) { + $sum += $matrix[$j]->[$i-1]->[0]; + } + $sign = ((defined $matrix[$j]->[$i-1]->[0] && $matrix[$j]->[$i-1]->[0] < 0) ? -1 : 1); + } + $matrix[0]->[$i] = [$sum] if(defined $sign); #fix: 08/2010 + } + } + unless(@{$matrix[0]->[$i]}) { + last; + } else { + $countgood++; + } + } + if($countgood) { + my $min; + if($sp == 3) { #3' prime end, 5 for 5' end + #find maximum shift to right (pos value) + $min = -100; + foreach my $i (0..($countgood-1)) { + $min = ((defined $matrix[0]->[$i]->[0] && $min > $matrix[0]->[$i]->[0]) ? $min : $matrix[0]->[$i]->[0]); + } + if($min > 0) { + $min = -$min; + } else { + $min = 0; + } + } else { + #find maximum shift to left (neg value) + $min = 100; + foreach my $i (0..($countgood-1)) { + $min = ((defined $matrix[0]->[$i]->[0] && $min < $matrix[0]->[$i]->[0]) ? $min : $matrix[0]->[$i]->[0]); + } + if($min < 0) { + $min = abs($min); + } else { + $min = 0; + } + } +# $kmershift{$sp}->{$kmersort[0]} = $min; + $kmersum{$sp} += $kmers->{$sp}->{$kmersort[0]}; + foreach my $i (0..($countgood-1)) { +# $kmershift{$sp}->{$kmersort[$i+1]} = $matrix[0]->[$i]->[0]+$min; + $kmersum{$sp} += $kmers->{$sp}->{$kmersort[$i+1]}; + } + } else { + my $tmp = (sort {$kmers->{$sp}->{$b} <=> $kmers->{$sp}->{$a}} keys %{$kmers->{$sp}})[0]; +# $kmershift{$sp}->{$tmp} = 0; + $kmersum{$sp} += $kmers->{$sp}->{$tmp}; + } + } elsif($numkmer == 1) { + my $tmp = (keys %{$kmers->{$sp}})[0]; +# $kmershift{$sp}->{$tmp} = 0; + $kmersum{$sp} += $kmers->{$sp}->{$tmp}; + } + } + + return \%kmersum; +} + +sub align2seqs { + my ($seq1,$seq2) = @_; + my @shift; + + #get number of shifted positions + if(substr($seq1,0,4) eq substr($seq2,1,4)) { #shift right by 1 + push(@shift,1); + } elsif(substr($seq1,0,3) eq substr($seq2,2,3)) { #shift right by 2 + push(@shift,2); + } + if(substr($seq1,1,4) eq substr($seq2,0,4)) { #shift left by 1 + push(@shift,-1); + } elsif(substr($seq1,2,3) eq substr($seq2,0,3)) { #shift left by 2 + push(@shift,-2); + } + + return \@shift; +} + +sub revcompuc { + my $seq = shift; + $seq = scalar reverse $seq; + $seq =~ tr/GATC/CTAG/; + return $seq; +} + +sub compuc { + my $seq = shift; + $seq =~ tr/GATC/CTAG/; + return $seq; +} + +#get data for graphs +sub getSeqStats { + my ($graphdata,$seqgd,$length) = @_; + if($length > $maxlength) { + $maxlength = $length; + } + my ($gc,$ns,$begin,$end,$str5,$str3,$bylength,$tmp); + $begin = $end = $gc = $ns = 0; + #get length + $bylength = 100/$length; + #get 5' and 3' ends + if($webstats{pt} || $webstats{ts} || $graphstats{pt} || $graphstats{ts}) { + $str5 = substr($seqgd,0,5); + $str3 = substr($seqgd,$length-5); + } + #GC content + if($webstats{gc} || $graphstats{gc}) { + $gc = ($seqgd =~ tr/GC//); + $gc = sprintf("%d",$gc*$bylength); + } + + #N's + if($webstats{ns} || $graphstats{ns}) { + $ns = ($seqgd =~ tr/N//); + $ns = ($ns > 0 && $ns*$bylength < 1 ? 1 : sprintf("%d",$ns*$bylength)); + } + + #tail stuff with min 5 char repeats + if($webstats{pt} || $graphstats{pt}) { + #at sequence 5'-end + if($str5 eq 'AAAAA' || $str5 eq 'TTTTT') { + my $tmpchar = substr($str5,0,1); #A or T + $begin = 5; + foreach(5..$length-1) { + $tmp = substr($seqgd,$_,1); + last unless($tmp eq $tmpchar || $tmp eq 'N'); + $begin++; + } + } + #at sequence 3'-end + if($str3 eq 'AAAAA' || $str3 eq 'TTTTT') { + my $tmpchar = substr($str3,0,1); #A or T + $end = 5; + foreach (reverse 0..$length-6) { + $tmp = substr($seqgd,$_,1); + last unless($tmp eq $tmpchar || $tmp eq 'N'); + $end++; + } + } + } + + #get base frequencies + if($webstats{ts} || $graphstats{ts}) { + if($length >= $TAG_LENGTH) { + foreach my $i (0..$TAG_LENGTH-1) { + $graphdata->{freqs}->{5}->{$i}->{substr($seqgd,$i,1)}++; + $graphdata->{freqs}->{3}->{$i}->{substr($seqgd,$length-$TAG_LENGTH+$i,1)}++; + } + } + #get kmers + if($length >= 5) { + unless($begin > 0 || $str5 eq 'CCCCC' || $str5 eq 'GGGGG' || $str5 eq 'NNNNN') { + $graphdata->{kmers}->{5}->{$str5}++; + } + unless($end > 0 || $str3 eq 'CCCCC' || $str3 eq 'GGGGG' || $str3 eq 'NNNNN') { + $graphdata->{kmers}->{3}->{$str3}++; + } + } + #check for MID tags + if($length >= $MIDCHECKLENGTH) { + $str5 = substr($seqgd,0,$MIDCHECKLENGTH); + foreach my $mid (keys %MIDS) { + if(index($str5,$mid) != -1) { + $graphdata->{mids}->{$mid}++; + last; + } + } + } + } + + #calculate sequence complexity + if($webstats{sc} || $graphstats{sc}) { + my ($rest,$steps,@dust,@entropy,$mean,$str,%counts,$num,$dustscore,$entropyval,$bynum); + if($length <= $WINDOWSIZE) { + $rest = $length; + $steps = 0; + } else { + $steps = int(($length - $WINDOWSIZE) / $WINDOWSTEP) + 1; + $rest = $length - $steps * $WINDOWSTEP; + unless($rest > $WINDOWSTEP) { + $rest += $WINDOWSTEP; + $steps--; + } + } + #dust and entropy + $num = $WINDOWSIZE-2; + $bynum = 1/$num; + $num--; + foreach my $i (0..$steps-1) { + $str = substr($seqgd,($i * $WINDOWSTEP),$WINDOWSIZE); + %counts = (); + foreach my $i (@WINDOWSIZEARRAY) { + $counts{substr($str,$i,3)}++; + } + #dust and entropy + $dustscore = $entropyval = 0; + foreach(values %counts) { + $dustscore += ($_ * ($_ - 1) * $POINTFIVE); + $entropyval -= ($_ * $bynum) * log($_ * $bynum); + } + push(@dust,($dustscore * $bynum)); + push(@entropy,($entropyval * $ONEOVERLOG62)); + } + #last step + if($rest > 5) { + $str = substr($seqgd,($steps * $WINDOWSTEP),$rest); + %counts = (); + $num = $rest-2; + foreach my $i (0..($num - 1)) { + $counts{substr($str,$i,3)}++; + } + $dustscore = $entropyval = 0; + $bynum = 1/$num; + foreach(values %counts) { + $dustscore += ($_ * ($_ - 1) * $POINTFIVE); + $entropyval -= ($_ * $bynum) * log($_ * $bynum); + } + push(@dust,(($dustscore / ($num-1)) * (($WINDOWSIZE - 2) / $num))); + push(@entropy,($entropyval / log($num))); + } else { + push(@dust,31); #to assign a maximum score based on the scaling factor 100/31 + push(@entropy,0); + } + + $mean = &getArrayMean(@dust); + $mean = int($mean * 100 / 31); #scale to 100 + $graphdata{compldust}->{$mean}++; + if(!exists $graphdata{complvals}->{dust}->{minval} || $graphdata{complvals}->{dust}->{minval} > $mean) { + $graphdata{complvals}->{dust}->{minval} = $mean; + $graphdata{complvals}->{dust}->{minseq} = $seqgd; + } + if(!exists $graphdata{complvals}->{dust}->{maxval} || $graphdata{complvals}->{dust}->{maxval} < $mean) { + $graphdata{complvals}->{dust}->{maxval} = $mean; + $graphdata{complvals}->{dust}->{maxseq} = $seqgd; + } + $mean = &getArrayMean(@entropy); + $mean = int($mean * 100); #scale to 100 + $graphdata{complentropy}->{$mean}++; + if(!exists $graphdata{complvals}->{entropy}->{minval} || $graphdata{complvals}->{entropy}->{minval} > $mean) { + $graphdata{complvals}->{entropy}->{minval} = $mean; + $graphdata{complvals}->{entropy}->{minseq} = $seqgd; + } + if(!exists $graphdata{complvals}->{entropy}->{maxval} || $graphdata{complvals}->{entropy}->{maxval} < $mean) { + $graphdata{complvals}->{entropy}->{maxval} = $mean; + $graphdata{complvals}->{entropy}->{maxseq} = $seqgd; + } + } + + #calculate dinucleotide odd ratios + if($webstats{dn} || $graphstats{dn}) { + &dinucOdds($seqgd,$length,\%{$graphdata{dinucodds}}); + } + + #store counts + if($webstats{ld} || $webstats{ld} || $graphstats{ld} || $graphstats{ld}) { + $graphdata->{counts}->{length}->{$length}++; + } + if($begin) { + $graphdata->{counts}->{tail5}->{$begin}++; + } + if($end) { + $graphdata->{counts}->{tail3}->{$end}++; + } + if($webstats{gc} || $graphstats{gc}) { + $graphdata->{counts}->{gc}->{$gc}++; + } + if($ns) { + $graphdata->{counts}->{ns}->{$ns}++; + } + + return 1; +} + +sub getQualStats { + my ($graphdata,$qual,$length) = @_; + + #check if quality values are available + return 0 unless($qual && ($webstats{qd} || $graphstats{qd})); + + #calculate decimal values of quals + my ($vals,$err); + if(exists $params{phred64}) { #scale data to Phred scale if necessary + ($vals,$err) = &convertQualAsciiToNumsPhred64($qual); + if($err) { + &printError("The sequence quality scores are not in Phred+64 format"); + } + } else { + $vals = &convertQualAsciiToNums($qual); + } + + #mean quality score + $graphdata->{qualsmean}->{int(&getArrayMean(@$vals))}++; + + my ($factor,$tmp,$count,$xmax,$bin,$tmpbin,$step); + + if($scale == 1) { #relative + #qual + if($length == 100) { + foreach my $i (0..99) { + $graphdata->{quals}->{$i}->{$vals->[$i]}++; + } + } elsif($length < 100) { #stretch + $factor = 100/$length; + foreach my $i (0..$length-1) { + $tmp = $vals->[$i]; + foreach my $j (int($i*$factor)..int(($i+1)*$factor)-1) { + $graphdata->{quals}->{$j}->{$tmp}++; + } + } + } elsif($length > 100) { #shrink + $factor = $length/100; + foreach my $i (0..99) { + $tmp = $count = 0; + foreach my $j (int($i*$factor)..int(($i+1)*$factor)-1) { + $tmp += $vals->[$j]; + $count++; + } + $graphdata->{quals}->{$i}->{int($tmp/$count)}++; + } + #my $piece = int($length/100); + #my $bypiece = 1/($piece+1); + #my $start = 0; + #my $end = 0; + #my $rest = ($length % 100) - 1; + #foreach my $i (0..$rest) { + # $end += $piece; + # $tmp = 0; + # foreach my $j ($start..$end) { + # $tmp += $vals->[$j]; + # } + # $graphdata{quals}->{$i}->{int($tmp * $bypiece)}++; + # $start = ++$end; + #} + #$rest++; + #$piece--; + #$bypiece = 1/($piece+1); + #foreach my $i ($rest..99) { + # $end += $piece; + # $tmp = 0; + # foreach my $j ($start..$end) { + # $tmp += $vals->[$j]; + # } + # $graphdata{quals}->{$i}->{int($tmp * $bypiece)}++; + # $start = ++$end; + #} + } + } + #absolute + foreach my $i (0..$length-1) { + $graphdata->{quala}->{$i}->{$vals->[$i]}++; + } +} + +sub getBinVal { + my $val = shift; + my $step; + if(!$val || $val <= 100) { + return 1; + } elsif($val < 10000) { + return int($val/100)+($val % 100 ? 1 : 0); + } elsif($val < 100000) { + return 1000; + } else { + $step = 1000000; + my $xmax = ($val % $step ? sprintf("%d",($val/$step+1))*$step : $val); + return ($xmax/100); + } +} + +sub convertStringToInt { + my $string = shift; + $string =~ s/(.)/sprintf("%x",ord($1))/eg; + return $string; +} + +sub getFileName { + my $str = shift; + $str =~ s/^.*\/([^\/]+)$/$1/; + return $str; +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/prinseq.xml Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,270 @@ +<tool id="prinseq_trimmer" name="FASTQ trimmer" version="0.1"> + <description>(prinseq)</description> + <version_command interpreter="perl">prinseq-lite.pl --version</version_command> + <requirements> + <requirement type="package" version="0.20.3">prinseq_perl_dependencies</requirement> + <requirement type="set_environment">PRINSEQ_SCRIPT_PATH</requirement> + </requirements> + <command> + #import os + temp_graph_file = `mktemp`; + + perl \$PRINSEQ_SCRIPT_PATH/prinseq-lite.pl + #if $seq_type.seq_type_opt == 'single': + -fastq $seq_type.input_singles + #if $seq_type.input_singles.ext == 'fastqillumina': + -phred64 + #end if + #else: + -fastq $seq_type.input_mate1 + -fastq2 $seq_type.input_mate2 + #if $seq_type.input_mate1.ext != $seq_type.input_mate2.ext: + #import sys + #silent sys.stderr.write( 'Both pairs from your paired-end library need to be from the same filetype.' ) + #end if + #if $seq_type.input_mate1.ext == 'fastqillumina': + -phred64 + -endif + #end if + + -out_good 'trimmed_reads' + ## we do not use the filter options in prinseq, so we are not interested in reads + ## that do not pass the filters + -out_bad null + + ## Trim options + #if $trim_to_len: + -trim_to_len $trim_to_len + #end if + + #if $trim_left: + -trim_left $trim_left + #end if + + #if $trim_right: + -trim_right + #end if + + #if $trim_qual_left or $trim_qual_right: + -trim_qual_type $trim_qual_type + -trim_qual_rule $trim_qual_rule + -trim_qual_window $trim_qual_window + -trim_qual_step $trim_qual_step + #end if + + #if $trim_qual_left: + -trim_qual_left $trim_qual_left + #end if + + #if $trim_qual_right: + -trim_qual_right $trim_qual_right + #end if + + + -graph_stats #echo ','.join( $graph_stats )# + + ## summary are written to stdout + -stats_all + + + -graph_data $temp_graph_file + + ; + + perl \$PRINSEQ_SCRIPT_PATH/prinseq-graphs-noPCA.pl -i $temp_graph_file -html_all -o #echo os.path.join( $html_file.files_path, 'graphs' )# + + ; + + python \$PRINSEQ_SCRIPT_PATH/create_index.py $html_file.files_path > $html_file + + + </command> + <inputs> + <conditional name="seq_type"> + <param name="seq_type_opt" type="select" label="Is this library paired- or single-end?"> + <option value="single">Single-end</option> + <option value="paired">Paired-end</option> + </param> + <when value="single"> + <param name="input_singles" type="data" format="fastqsanger,fastqillumina,fastq,fasta" label="FASTQ/FASTA file" help="FASTQ or FASTA files." /> + </when> + <when value="paired"> + <param name="input_mate1" type="data" format="fastqsanger,fastqillumina,fastq,fasta" label="FASTQ/FASTA file" help="FASTQ or FASTA files." /> + <param name="input_mate2" type="data" format="fastqsanger,fastqillumina,fastq,fasta" label="FASTQ/FASTA file" help="FASTQ or FASTA files." /> + </when> + </conditional> + + <param name="trim_to_len" type="integer" value="" + label="Trim all sequence from the 3'-end to result in sequence with this length" + help="(-trim_to_len)"/> + + <param name="trim_left" type="integer" value="" + label="Trim sequence at the 5'-end by trim_left positions" + help="(-trim_left)"/> + + <param name="trim_right" type="integer" value="" + label="Trim sequence at the 3'-end by trim_right positions" + help="(-trim_right)"/> + + <param name="trim_left_p" type="integer" value="" + label="Trim sequence at the 5'-end by trim_left_p percentage of read length." + help="The trim length is rounded towards the lower integer (e.g. 143.6 is rounded to 143 positions). Use an integer between 1 and 100 for the percentage value. (-trim_left_p)"/> + + <param name="trim_right_p" type="integer" value="" + label="Trim sequence at the 3'-end by trim_right_p percentage of read length" + help="The trim length is rounded towards the lower integer (e.g. 143.6 is rounded to 143 positions). Use an integer between 1 and 100 for the percentage value. (-trim_right_p)"/> + + <param name="trim_tail_left" type="integer" value="" + label="Trim poly-A/T tail with a minimum length of trim_tail_left at the 5'-end" + help="(-trim_tail_left)"/> + + <param name="trim_tail_right" type="integer" value="" + label="Trim poly-A/T tail with a minimum length of trim_tail_right at the 3'-end" + help="(-trim_tail_right)"/> + + <param name="trim_ns_left" type="integer" value="" + label="Trim poly-N tail with a minimum length of trim_ns_left at the 5'-end" + help="(-trim_left)"/> + + <param name="trim_ns_right" type="integer" value="" + label="Trim poly-N tail with a minimum length of trim_ns_right at the 3'-end." + help="(-trim_ns_right)"/> + + + <param name="trim_qual_left" type="integer" value="" + label=" Trim sequence by quality score from the 5'-end with this threshold score" + help="(-trim_qual_left)"/> + + <param name="trim_qual_right" type="integer" value="" + label="Trim sequence by quality score from the 3'-end with this threshold score" + help="(-trim_qual_right)"/> + + <param name="trim_qual_type" type="select" label="Type of quality score calculation to use"> + <option value="min" selected="True">min</option> + <option value="mean">mean</option> + <option value="max">max</option> + <option value="sum">sum</option> + </param> + + <param name="trim_qual_rule" type="select" label="Rule to use to compare quality score to calculated value."> + <option value="gt">greater than quality score</option> + <option value="lt" selected="True">less than quality score</option> + <option value="et">equal to quality score</option> + </param> + + <param name="trim_qual_window" type="integer" value="1" + label="The sliding window size used to calculate quality score by type" + help="(-trim_qual_window)"/> + + <param name="trim_qual_step" type="integer" value="1" + label="Step size used to move the sliding window" + help="To move the window over all quality scores without missing any, the step size should be less or equal to the window size(-trim_qual_step)"/> + + <param name="graph_stats" type="select" multiple="True" label="Which statistics should be calculated included in the graph_data file"> + <option value="ld" selected="True">Length distribution</option> + <option value="gc" selected="True">GC content distribution</option> + <option value="qd" selected="True">Base quality distribution</option> + <option value="ns" selected="True">Occurence of N</option> + <option value="pt" selected="True">Poly-A/T tails</option> + <option value="ts" selected="True">Tag sequence check</option> + <option value="as" selected="True">Assembly quality measure</option> + <option value="de" selected="True">Sequence duplication - exact only</option> + <option value="da" selected="True">Sequence duplication - exact + 5'/3'</option> + <option value="sc" selected="True">Sequence complexity</option> + <option value="dn" selected="True">Dinucleotide odds ratios, includes the PCA plots</option> + </param> + + + <!-- TODO + -log <file> + Log file to keep track of parameters, errors, etc. The log file + name is optional. If no file name is given, the log file name + will be "inputname.log". If the log file already exists, new + content will be added to the file. + --> + + + <outputs> + <data format="fastq" name="ofile_single" metadata_source="seq_type.input_singles" label="${tool.name} on ${on_string}"> + <filter>seq_type['seq_type_opt'] == "single"</filter> + </data> + + <data format="fastq" name="outfile_r1" label="${tool.name} on ${on_string}"> + <filter>seq_type['seq_type_opt'] == "paired"</filter> + <actions> + <conditional name="seq_type.seq_type_opt"> + <when value="single"> + <action type="format"> + <option type="from_param" name="seq_type.input_singles" param_attribute="ext" /> + </action> + </when> + <when value="paired"> + <action type="format"> + <option type="from_param" name="seq_type.input_mate1" param_attribute="ext" /> + </action> + </when> + </conditional> + </actions> + </data> + <data format="fastq" name="outfile_r2" label="${tool.name} on ${on_string}"> + <filter>seq_type['seq_type_opt'] == "paired"</filter> + <actions> + <conditional name="seq_type.seq_type_opt"> + <when value="single"> + <action type="format"> + <option type="from_param" name="seq_type.input_singles" param_attribute="ext" /> + </action> + </when> + <when value="paired"> + <action type="format"> + <option type="from_param" name="seq_type.input_mate1" param_attribute="ext" /> + </action> + </when> + </conditional> + </actions> + </data> + + <data format="html" name="html_file" label="${tool.name} on ${on_string} summary" /> + </outputs> + <tests> + <test> + <!-- grep a FASTA file for sequences with specific motif --> + <param name="seq_type.input_singles" value="example1.fastq" /> + <output name="ofile_single" file="example1_trim_right_10.fastq" /> + <param name="trim_right" value="10" /> + </test> + </tests> + <help> + + +.. class:: warningmark + +**TIP** + +----- + +**What it does** + + +PRINSEQ is a tool that generates summary statistics of sequence and quality data and that is used to filter, reformat and trim next-generation sequence data. + + +http://prinseq.sourceforge.net/manual.html + + + ***** ORDER OF PROCESSING ***** + The available options are processed in the following order: + + seq_num, trim_left, trim_right, trim_left_p, trim_right_p, + trim_qual_left, trim_qual_right, trim_tail_left, + trim_tail_right, trim_ns_left, trim_ns_right, trim_to_len, + min_len, max_len, range_len, min_qual_score, max_qual_score, + min_qual_mean, max_qual_mean, min_gc, max_gc, range_gc, + ns_max_p, ns_max_n, noniupac, lc_method, derep, seq_id, + seq_case, dna_rna, out_format + + + + + </help> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/readme.rst Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,45 @@ +Galaxy wrapper for statistical hypothesis testing with scipy +============================================================ + +This wrapper is copyright 2013 by Björn Grüning. + + + + +============ +Installation +============ + + + +======= +History +======= + + + - v0.1: no release yet + + + + +Wrapper Licence (MIT/BSD style) +=============================== + +Permission to use, copy, modify, and distribute this software and its +documentation with or without modifications and for any purpose and +without fee is hereby granted, provided that any copyright notices +appear in all copies and that both those copyright notices and this +permission notice appear in supporting documentation, and that the +names of the contributors or copyright holders not be used in +advertising or publicity pertaining to distribution of the software +without specific prior permission. + +THE CONTRIBUTORS AND COPYRIGHT HOLDERS OF THIS SOFTWARE DISCLAIM ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT +OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE +OR PERFORMANCE OF THIS SOFTWARE. +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example1.fasta Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,24 @@ +>seq1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT +>seq1_dupl1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT +>seq1_dupl2 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT +>seq1_dupl3 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT +>seq2 length=200 +ACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTAACCACGT +>seq3 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTGTGTGCATGCG +>seq3_dupl1 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTGTGTGCATGCG +>seq4 length=50 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTAGAGA +>seq5 length=100 Ns_begin=10 +NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGAGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC +>seq6 length=100 Ns_end=10 +TACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAANNNNNNNNNN +>seq7 length=50 +TACACCAGAGGTGTCTCTGTGTGGGTACACCAGAGGTGTCTCTGTGTGGG +>seq8 length=50 As=50 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example1.fastq Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,48 @@ +@seq1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT ++seq1 length=100 +1234123412342134123412341234123412341234123412341234132412341234123412341234123412341234123412341234 +@seq1_dupl1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT ++seq1_dupl1 length=100 +1234123412342134123412341234123412341234123412341234132412341234123412341234123412341234123412341234 +@seq1_dupl2 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT ++seq1_dupl2 length=100 +1234123412342134123412341234123412341234123412341234132412341234123412341234123412341234123412341234 +@seq1_dupl3 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT ++seq1_dupl3 length=100 +1234123412342134123412341234123412341234123412341234132412341234123412341234123412341234123412341234 +@seq2 length=200 +ACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTAACCACGT ++seq2 length=200 +++++++++++++++++..............00000000000000000000333333333333333355555555555555555AAAAAAAAAAAAAA999999999999996666666666666666444444444444444442222222222222222222221111111)))))))))))))))>>>>>>>>>>>>> +@seq3 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTGTGTGCATGCG ++seq3 length=100 +FHHFFFFFFDDAA@====AAB===BBBBAAADDDDDDDDAAAADDDDD?????FFFFF??FFFFFFDA@AFFFFFFFFFFFFFFFFCCABA?>9:773.. +@seq3_dupl1 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTGTGTGCATGCG ++seq3_dupl1 length=100 +FHHFFFFFFDDAA@====AAB===BBBBAAADDDDDDDDAAAADDDDD?????FFFFF??FFFFFFDA@AFFFFFFFFFFFFFFFFCCABA?>9:773.. +@seq4 length=50 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTAGAGA ++seq4 length=50 +???CCDDBBBBBAA333:ABB=:::AGFFFFFHHHHFFFFFFFF??@FFF +@seq5 length=100 Ns_begin=10 +NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGAGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC ++seq5 length=100 Ns_begin=10 +!!!!!!!!!!99999999999999AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFF +@seq6 length=100 Ns_end=10 +TACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAANNNNNNNNNN ++seq6 length=100 Ns_end=10 +FFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAA9999999999999999999995555555!!!!!!!!!! +@seq7 length=50 +TACACCAGAGGTGTCTCTGTGTGGGTACACCAGAGGTGTCTCTGTGTGGG ++seq7 length=50 +!''*((((***+))%%%++)(%%%%).1***-+*''))**55CCF>>>>> +@seq8 length=50 As=50 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++seq8 length=50 As=50 +55555555555555555555555555555555555555555555555555 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example1.gd Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,3 @@ +#Graph data +#[prinseq-lite-0.20.3] [03/13/2013 12:11:59] Command: "perl prinseq-lite.pl -fastq example/example1.fastq -graph_data example/example1.gd -verbose -out_good null -out_bad null" +{"numseqs":12,"numbases":1150,"pairedend":0,"maxlength":200,"binval":2,"exactonly":0,"tagmidnum":0,"scale":1,"filename1":"6578616d706c65312e6661737471","format1":"fastq","counts":{"gc":{"50":5,"53":1,"0":1,"49":1,"56":2,"57":2},"length":{"50":3,"200":1,"100":8},"ns":{"10":2},"tail3":{"50":1},"tail5":{"50":1}},"stats":{"gc":{"p25":50,"p75":56,"mode":50,"min":0,"std":"14.83","range":58,"max":57,"modeval":5,"median":50,"mean":"48.17"},"length":{"p25":75,"p75":100,"mode":100,"min":50,"std":"37.96","range":151,"max":200,"modeval":8,"median":100,"mean":"95.83"},"ns":{"p25":10,"p75":10,"mode":10,"min":10,"std":"0.00","range":1,"max":10,"modeval":2,"median":10,"mean":"10.00"},"tail3":{"p25":50,"p75":50,"mode":50,"min":50,"std":"0.00","range":1,"max":50,"modeval":1,"median":50,"mean":"50.00"},"tail5":{"p25":50,"p75":50,"mode":50,"min":50,"std":"0.00","range":1,"max":50,"modeval":1,"median":50,"mean":"50.00"}},"quals":{"0":{"p25":13,"p75":33,"mode":16,"min":0,"std":"12.68","range":38,"max":37,"modeval":4,"median":16,"mean":"19.58"},"1":{"p25":13,"p75":33,"mode":17,"min":0,"std":"13.06","range":40,"max":39,"modeval":4,"median":17,"mean":"20.25"},"10":{"p25":18,"p75":35,"mode":18,"min":7,"std":"9.55","range":31,"max":37,"modeval":4,"median":19,"mean":"23.17"},"11":{"p25":19,"p75":32,"mode":19,"min":7,"std":"8.81","range":31,"max":37,"modeval":4,"median":19,"mean":"23.00"},"12":{"p25":17,"p75":32,"mode":17,"min":7,"std":"9.16","range":31,"max":37,"modeval":4,"median":18,"mean":"22.33"},"13":{"p25":16,"p75":31,"mode":16,"min":7,"std":"9.19","range":31,"max":37,"modeval":4,"median":18,"mean":"21.83"},"14":{"p25":18,"p75":28,"mode":18,"min":7,"std":"8.14","range":31,"max":37,"modeval":4,"median":19,"mean":"21.83"},"15":{"p25":19,"p75":28,"mode":19,"min":7,"std":"7.82","range":31,"max":37,"modeval":4,"median":19,"mean":"22.33"},"16":{"p25":16,"p75":28,"mode":16,"min":9,"std":"8.09","range":29,"max":37,"modeval":4,"median":18,"mean":"21.50"},"17":{"p25":17,"p75":28,"mode":17,"min":9,"std":"7.87","range":29,"max":37,"modeval":4,"median":18,"mean":"21.83"},"18":{"p25":18,"p75":32,"mode":18,"min":9,"std":"8.17","range":28,"max":36,"modeval":4,"median":19,"mean":"22.75"},"19":{"p25":19,"p75":32,"mode":19,"min":9,"std":"7.98","range":28,"max":36,"modeval":4,"median":19,"mean":"23.08"},"2":{"p25":14,"p75":33,"mode":18,"min":0,"std":"12.28","range":40,"max":39,"modeval":4,"median":18,"mean":"21.08"},"20":{"p25":16,"p75":33,"mode":16,"min":9,"std":"8.80","range":28,"max":36,"modeval":4,"median":18,"mean":"22.25"},"21":{"p25":17,"p75":28,"mode":17,"min":9,"std":"7.71","range":28,"max":36,"modeval":4,"median":18,"mean":"21.75"},"22":{"p25":18,"p75":28,"mode":18,"min":10,"std":"7.38","range":27,"max":36,"modeval":4,"median":19,"mean":"22.17"},"23":{"p25":19,"p75":28,"mode":19,"min":10,"std":"7.21","range":27,"max":36,"modeval":4,"median":19,"mean":"22.50"},"24":{"p25":16,"p75":32,"mode":16,"min":8,"std":"9.24","range":29,"max":36,"modeval":4,"median":18,"mean":"22.75"},"25":{"p25":17,"p75":32,"mode":17,"min":8,"std":"8.82","range":29,"max":36,"modeval":4,"median":19,"mean":"23.33"},"26":{"p25":18,"p75":32,"mode":18,"min":8,"std":"8.59","range":29,"max":36,"modeval":5,"median":19,"mean":"23.67"},"27":{"p25":19,"p75":32,"mode":19,"min":8,"std":"8.38","range":29,"max":36,"modeval":4,"median":19,"mean":"24.00"},"28":{"p25":16,"p75":32,"mode":16,"min":4,"std":"9.10","range":33,"max":36,"modeval":4,"median":18,"mean":"21.33"},"29":{"p25":17,"p75":32,"mode":17,"min":4,"std":"8.92","range":33,"max":36,"modeval":4,"median":18,"mean":"21.67"},"3":{"p25":14,"p75":33,"mode":19,"min":0,"std":"11.74","range":38,"max":37,"modeval":4,"median":19,"mean":"21.08"},"30":{"p25":18,"p75":32,"mode":18,"min":4,"std":"8.76","range":33,"max":36,"modeval":6,"median":18,"mean":"22.00"},"31":{"p25":18,"p75":33,"mode":19,"min":4,"std":"9.23","range":33,"max":36,"modeval":4,"median":19,"mean":"22.83"},"32":{"p25":16,"p75":33,"mode":16,"min":4,"std":"9.74","range":33,"max":36,"modeval":4,"median":18,"mean":"21.83"},"33":{"p25":17,"p75":33,"mode":17,"min":4,"std":"9.49","range":33,"max":36,"modeval":4,"median":19,"mean":"22.33"},"34":{"p25":18,"p75":33,"mode":18,"min":10,"std":"8.28","range":27,"max":36,"modeval":4,"median":20,"mean":"23.75"},"35":{"p25":19,"p75":33,"mode":19,"min":10,"std":"8.06","range":27,"max":36,"modeval":4,"median":20,"mean":"24.08"},"36":{"p25":16,"p75":33,"mode":16,"min":10,"std":"9.11","range":27,"max":36,"modeval":4,"median":20,"mean":"23.67"},"37":{"p25":17,"p75":32,"mode":17,"min":10,"std":"8.45","range":26,"max":35,"modeval":4,"median":20,"mean":"23.67"},"38":{"p25":18,"p75":32,"mode":18,"min":8,"std":"8.58","range":28,"max":35,"modeval":4,"median":20,"mean":"23.92"},"39":{"p25":19,"p75":32,"mode":19,"min":8,"std":"7.77","range":26,"max":33,"modeval":4,"median":20,"mean":"23.75"},"4":{"p25":13,"p75":33,"mode":16,"min":0,"std":"12.00","range":38,"max":37,"modeval":4,"median":16,"mean":"20.08"},"40":{"p25":16,"p75":32,"mode":16,"min":7,"std":"8.62","range":27,"max":33,"modeval":4,"median":20,"mean":"22.67"},"41":{"p25":17,"p75":32,"mode":17,"min":7,"std":"8.36","range":27,"max":33,"modeval":4,"median":23,"mean":"23.50"},"42":{"p25":18,"p75":32,"mode":32,"min":4,"std":"8.63","range":29,"max":32,"modeval":5,"median":24,"mean":"23.67"},"43":{"p25":19,"p75":32,"mode":19,"min":4,"std":"8.96","range":32,"max":35,"modeval":4,"median":24,"mean":"24.50"},"44":{"p25":16,"p75":32,"mode":16,"min":4,"std":"9.58","range":32,"max":35,"modeval":4,"median":22,"mean":"23.25"},"45":{"p25":17,"p75":32,"mode":17,"min":4,"std":"9.33","range":32,"max":35,"modeval":4,"median":22,"mean":"23.58"},"46":{"p25":18,"p75":32,"mode":18,"min":4,"std":"9.11","range":32,"max":35,"modeval":4,"median":22,"mean":"23.92"},"47":{"p25":19,"p75":32,"mode":19,"min":4,"std":"8.90","range":32,"max":35,"modeval":4,"median":22,"mean":"24.25"},"48":{"p25":16,"p75":30,"mode":16,"min":4,"std":"8.39","range":29,"max":32,"modeval":4,"median":22,"mean":"22.08"},"49":{"p25":17,"p75":30,"mode":17,"min":4,"std":"8.00","range":29,"max":32,"modeval":4,"median":22,"mean":"22.08"},"5":{"p25":13,"p75":33,"mode":17,"min":0,"std":"11.89","range":38,"max":37,"modeval":4,"median":17,"mean":"20.42"},"50":{"p25":18,"p75":31,"mode":18,"min":8,"std":"7.50","range":25,"max":32,"modeval":4,"median":22,"mean":"23.33"},"51":{"p25":19,"p75":31,"mode":19,"min":8,"std":"7.27","range":25,"max":32,"modeval":4,"median":22,"mean":"23.67"},"52":{"p25":16,"p75":31,"mode":16,"min":13,"std":"8.10","range":26,"max":38,"modeval":4,"median":22,"mean":"23.58"},"53":{"p25":18,"p75":34,"mode":18,"min":13,"std":"8.75","range":26,"max":38,"modeval":4,"median":22,"mean":"25.42"},"54":{"p25":17,"p75":34,"mode":17,"min":16,"std":"8.62","range":22,"max":37,"modeval":4,"median":22,"mean":"25.25"},"55":{"p25":19,"p75":36,"mode":19,"min":16,"std":"8.40","range":22,"max":37,"modeval":4,"median":21,"mean":"26.08"},"56":{"p25":16,"p75":36,"mode":16,"min":9,"std":"10.08","range":29,"max":37,"modeval":4,"median":20,"mean":"24.42"},"57":{"p25":17,"p75":36,"mode":17,"min":9,"std":"9.81","range":29,"max":37,"modeval":4,"median":20,"mean":"24.75"},"58":{"p25":18,"p75":31,"mode":18,"min":9,"std":"8.38","range":29,"max":37,"modeval":4,"median":20,"mean":"23.92"},"59":{"p25":19,"p75":31,"mode":19,"min":9,"std":"8.16","range":29,"max":37,"modeval":4,"median":20,"mean":"24.25"},"6":{"p25":14,"p75":35,"mode":18,"min":0,"std":"11.83","range":38,"max":37,"modeval":4,"median":18,"mean":"21.33"},"60":{"p25":16,"p75":36,"mode":16,"min":9,"std":"10.08","range":29,"max":37,"modeval":4,"median":20,"mean":"24.42"},"61":{"p25":17,"p75":36,"mode":17,"min":9,"std":"9.81","range":29,"max":37,"modeval":4,"median":20,"mean":"24.75"},"62":{"p25":18,"p75":36,"mode":18,"min":12,"std":"8.94","range":26,"max":37,"modeval":4,"median":20,"mean":"24.67"},"63":{"p25":19,"p75":36,"mode":19,"min":12,"std":"8.74","range":26,"max":37,"modeval":4,"median":20,"mean":"24.92"},"64":{"p25":16,"p75":36,"mode":16,"min":10,"std":"10.00","range":30,"max":39,"modeval":4,"median":19,"mean":"23.83"},"65":{"p25":17,"p75":36,"mode":17,"min":10,"std":"9.75","range":30,"max":39,"modeval":4,"median":19,"mean":"24.17"},"66":{"p25":18,"p75":35,"mode":18,"min":9,"std":"9.22","range":31,"max":39,"modeval":4,"median":19,"mean":"24.08"},"67":{"p25":19,"p75":32,"mode":19,"min":9,"std":"8.48","range":31,"max":39,"modeval":5,"median":19,"mean":"23.92"},"68":{"p25":16,"p75":31,"mode":16,"min":6,"std":"9.40","range":34,"max":39,"modeval":4,"median":19,"mean":"22.50"},"69":{"p25":17,"p75":32,"mode":17,"min":6,"std":"9.34","range":34,"max":39,"modeval":4,"median":19,"mean":"23.00"},"7":{"p25":14,"p75":35,"mode":19,"min":0,"std":"11.74","range":38,"max":37,"modeval":4,"median":19,"mean":"21.67"},"70":{"p25":18,"p75":36,"mode":18,"min":6,"std":"10.07","range":34,"max":39,"modeval":4,"median":19,"mean":"24.17"},"71":{"p25":19,"p75":36,"mode":19,"min":6,"std":"9.87","range":34,"max":39,"modeval":5,"median":19,"mean":"24.50"},"72":{"p25":16,"p75":36,"mode":16,"min":8,"std":"10.09","range":30,"max":37,"modeval":4,"median":18,"mean":"23.33"},"73":{"p25":17,"p75":36,"mode":17,"min":8,"std":"9.86","range":30,"max":37,"modeval":5,"median":18,"mean":"23.67"},"74":{"p25":18,"p75":36,"mode":18,"min":8,"std":"9.64","range":30,"max":37,"modeval":4,"median":19,"mean":"24.00"},"75":{"p25":19,"p75":36,"mode":19,"min":8,"std":"9.45","range":30,"max":37,"modeval":4,"median":19,"mean":"24.33"},"76":{"p25":16,"p75":36,"mode":16,"min":9,"std":"9.97","range":29,"max":37,"modeval":4,"median":18,"mean":"23.42"},"77":{"p25":17,"p75":36,"mode":17,"min":9,"std":"9.73","range":29,"max":37,"modeval":5,"median":18,"mean":"23.75"},"78":{"p25":18,"p75":36,"mode":18,"min":9,"std":"9.51","range":29,"max":37,"modeval":4,"median":19,"mean":"24.08"},"79":{"p25":19,"p75":36,"mode":19,"min":9,"std":"9.30","range":29,"max":37,"modeval":4,"median":19,"mean":"24.42"},"8":{"p25":14,"p75":35,"mode":16,"min":0,"std":"12.04","range":38,"max":37,"modeval":4,"median":16,"mean":"20.75"},"80":{"p25":16,"p75":36,"mode":16,"min":16,"std":"9.07","range":22,"max":37,"modeval":4,"median":20,"mean":"24.33"},"81":{"p25":17,"p75":36,"mode":17,"min":17,"std":"8.77","range":21,"max":37,"modeval":5,"median":20,"mean":"24.67"},"82":{"p25":18,"p75":36,"mode":18,"min":16,"std":"8.57","range":22,"max":37,"modeval":4,"median":20,"mean":"24.92"},"83":{"p25":19,"p75":36,"mode":19,"min":16,"std":"8.43","range":22,"max":37,"modeval":4,"median":20,"mean":"24.92"},"84":{"p25":16,"p75":37,"mode":16,"min":16,"std":"9.62","range":22,"max":37,"modeval":5,"median":20,"mean":"25.17"},"85":{"p25":17,"p75":37,"mode":17,"min":16,"std":"9.31","range":22,"max":37,"modeval":4,"median":20,"mean":"25.50"},"86":{"p25":18,"p75":34,"mode":18,"min":8,"std":"9.42","range":30,"max":37,"modeval":4,"median":20,"mean":"24.67"},"87":{"p25":19,"p75":34,"mode":19,"min":8,"std":"9.19","range":30,"max":37,"modeval":4,"median":20,"mean":"25.00"},"88":{"p25":16,"p75":32,"mode":16,"min":8,"std":"9.31","range":30,"max":37,"modeval":4,"median":20,"mean":"23.33"},"89":{"p25":17,"p75":33,"mode":17,"min":8,"std":"9.22","range":30,"max":37,"modeval":4,"median":20,"mean":"23.83"},"9":{"p25":15,"p75":34,"mode":17,"min":0,"std":"11.48","range":38,"max":37,"modeval":4,"median":17,"mean":"20.75"},"90":{"p25":18,"p75":31,"mode":18,"min":0,"std":"10.35","range":38,"max":37,"modeval":4,"median":19,"mean":"21.67"},"91":{"p25":19,"p75":30,"mode":19,"min":0,"std":"9.94","range":38,"max":37,"modeval":4,"median":19,"mean":"21.67"},"92":{"p25":16,"p75":29,"mode":16,"min":0,"std":"10.23","range":38,"max":37,"modeval":4,"median":18,"mean":"20.58"},"93":{"p25":17,"p75":26,"mode":17,"min":0,"std":"8.91","range":38,"max":37,"modeval":4,"median":19,"mean":"20.92"},"94":{"p25":18,"p75":29,"mode":18,"min":0,"std":"9.62","range":38,"max":37,"modeval":4,"median":22,"mean":"22.83"},"95":{"p25":19,"p75":29,"mode":19,"min":0,"std":"9.43","range":38,"max":37,"modeval":4,"median":21,"mean":"22.67"},"96":{"p25":16,"p75":29,"mode":16,"min":0,"std":"9.91","range":38,"max":37,"modeval":4,"median":21,"mean":"21.67"},"97":{"p25":17,"p75":29,"mode":17,"min":0,"std":"9.84","range":38,"max":37,"modeval":4,"median":18,"mean":"21.33"},"98":{"p25":15,"p75":29,"mode":18,"min":0,"std":"10.19","range":38,"max":37,"modeval":4,"median":18,"mean":"20.83"},"99":{"p25":16,"p75":29,"mode":19,"min":0,"std":"10.11","range":38,"max":37,"modeval":4,"median":19,"mean":"21.17"}},"qualsbin":{"0":{"p25":13,"p75":33,"mode":37,"min":0,"std":"12.46","range":40,"max":39,"modeval":5,"median":18,"mean":"20.47"},"1":{"p25":13,"p75":35,"mode":37,"min":0,"std":"12.00","range":38,"max":37,"modeval":6,"median":19,"mean":"21.08"},"10":{"p25":17,"p75":28,"mode":28,"min":4,"std":"8.00","range":33,"max":36,"modeval":5,"median":19,"mean":"20.79"},"11":{"p25":16,"p75":28,"mode":16,"min":4,"std":"8.70","range":33,"max":36,"modeval":4,"median":19,"mean":"21.42"},"12":{"p25":17,"p75":33,"mode":17,"min":8,"std":"9.10","range":31,"max":38,"modeval":4,"median":19,"mean":"23.54"},"13":{"p25":16,"p75":32,"mode":16,"min":9,"std":"9.04","range":29,"max":37,"modeval":5,"median":19,"mean":"23.79"},"14":{"p25":17,"p75":32,"mode":32,"min":9,"std":"9.19","range":29,"max":37,"modeval":6,"median":19,"mean":"23.50"},"15":{"p25":16,"p75":35,"mode":16,"min":10,"std":"9.53","range":30,"max":39,"modeval":4,"median":19,"mean":"24.33"},"16":{"p25":17,"p75":35,"mode":17,"min":6,"std":"10.07","range":34,"max":39,"modeval":4,"median":19,"mean":"24.12"},"17":{"p25":16,"p75":35,"mode":16,"min":6,"std":"10.05","range":34,"max":39,"modeval":4,"median":19,"mean":"24.00"},"18":{"p25":17,"p75":33,"mode":17,"min":8,"std":"9.33","range":30,"max":37,"modeval":4,"median":19,"mean":"23.71"},"19":{"p25":16,"p75":32,"mode":32,"min":9,"std":"8.26","range":29,"max":37,"modeval":8,"median":20,"mean":"23.71"},"2":{"p25":13,"p75":36,"mode":37,"min":0,"std":"12.15","range":38,"max":37,"modeval":6,"median":18,"mean":"21.08"},"20":{"p25":17,"p75":32,"mode":32,"min":15,"std":"7.87","range":23,"max":37,"modeval":8,"median":20,"mean":"24.75"},"21":{"p25":17,"p75":34,"mode":16,"min":15,"std":"8.41","range":23,"max":37,"modeval":4,"median":25,"mean":"25.67"},"22":{"p25":17,"p75":32,"mode":17,"min":15,"std":"7.61","range":21,"max":35,"modeval":4,"median":24,"mean":"24.88"},"23":{"p25":17,"p75":32,"mode":16,"min":15,"std":"7.86","range":23,"max":37,"modeval":4,"median":24,"mean":"25.00"},"24":{"p25":18,"p75":30,"mode":18,"min":15,"std":"7.13","range":23,"max":37,"modeval":5,"median":20,"mean":"24.14"},"25":{"p25":18,"p75":30,"mode":16,"min":16,"std":"6.77","range":17,"max":32,"modeval":4,"median":19,"mean":"23.56"},"26":{"p25":18,"p75":32,"mode":18,"min":17,"std":"8.57","range":21,"max":37,"modeval":6,"median":18,"mean":"25.11"},"27":{"p25":18,"p75":36,"mode":16,"min":16,"std":"9.06","range":22,"max":37,"modeval":4,"median":19,"mean":"25.56"},"28":{"p25":18,"p75":32,"mode":18,"min":17,"std":"8.26","range":21,"max":37,"modeval":6,"median":18,"mean":"24.78"},"29":{"p25":18,"p75":32,"mode":16,"min":16,"std":"8.31","range":22,"max":37,"modeval":4,"median":19,"mean":"24.78"},"3":{"p25":13,"p75":35,"mode":37,"min":0,"std":"11.91","range":38,"max":37,"modeval":6,"median":19,"mean":"21.00"},"30":{"p25":18,"p75":36,"mode":18,"min":17,"std":"8.87","range":21,"max":37,"modeval":6,"median":18,"mean":"25.11"},"31":{"p25":18,"p75":36,"mode":16,"min":16,"std":"8.77","range":22,"max":37,"modeval":4,"median":19,"mean":"24.67"},"32":{"p25":18,"p75":35,"mode":18,"min":17,"std":"8.35","range":21,"max":37,"modeval":5,"median":19,"mean":"24.56"},"33":{"p25":19,"p75":31,"mode":16,"min":16,"std":"7.07","range":21,"max":36,"modeval":4,"median":20,"mean":"23.67"},"34":{"p25":18,"p75":32,"mode":17,"min":17,"std":"7.90","range":21,"max":37,"modeval":4,"median":20,"mean":"24.33"},"35":{"p25":19,"p75":36,"mode":16,"min":16,"std":"8.62","range":22,"max":37,"modeval":4,"median":20,"mean":"24.89"},"36":{"p25":18,"p75":36,"mode":17,"min":17,"std":"8.57","range":21,"max":37,"modeval":4,"median":20,"mean":"24.89"},"37":{"p25":19,"p75":36,"mode":16,"min":16,"std":"8.62","range":22,"max":37,"modeval":4,"median":20,"mean":"24.89"},"38":{"p25":18,"p75":36,"mode":17,"min":17,"std":"8.57","range":21,"max":37,"modeval":4,"median":20,"mean":"24.89"},"39":{"p25":19,"p75":36,"mode":16,"min":16,"std":"8.62","range":22,"max":37,"modeval":4,"median":20,"mean":"24.89"},"4":{"p25":17,"p75":34,"mode":17,"min":0,"std":"10.51","range":38,"max":37,"modeval":4,"median":18,"mean":"21.75"},"40":{"p25":18,"p75":36,"mode":17,"min":17,"std":"8.57","range":21,"max":37,"modeval":4,"median":20,"mean":"24.89"},"41":{"p25":19,"p75":37,"mode":37,"min":16,"std":"8.96","range":22,"max":37,"modeval":5,"median":20,"mean":"25.83"},"42":{"p25":18,"p75":34,"mode":17,"min":17,"std":"8.60","range":21,"max":37,"modeval":4,"median":20,"mean":"25.56"},"43":{"p25":19,"p75":32,"mode":16,"min":16,"std":"8.04","range":22,"max":37,"modeval":4,"median":20,"mean":"25.00"},"44":{"p25":17,"p75":32,"mode":17,"min":0,"std":"9.68","range":38,"max":37,"modeval":4,"median":19,"mean":"23.78"},"45":{"p25":16,"p75":30,"mode":16,"min":0,"std":"10.60","range":38,"max":37,"modeval":4,"median":19,"mean":"22.00"},"46":{"p25":17,"p75":25,"mode":17,"min":0,"std":"9.96","range":38,"max":37,"modeval":4,"median":18,"mean":"20.89"},"47":{"p25":16,"p75":22,"mode":16,"min":0,"std":"9.85","range":38,"max":37,"modeval":4,"median":19,"mean":"20.33"},"48":{"p25":17,"p75":18,"mode":18,"min":0,"std":"9.12","range":38,"max":37,"modeval":6,"median":18,"mean":"18.00"},"49":{"p25":13,"p75":24,"mode":19,"min":0,"std":"8.98","range":38,"max":37,"modeval":4,"median":19,"mean":"18.70"},"5":{"p25":17,"p75":32,"mode":32,"min":8,"std":"8.77","range":30,"max":37,"modeval":5,"median":19,"mean":"22.38"},"50":{"p25":24,"p75":24,"mode":24,"min":24,"std":"0.00","range":1,"max":24,"modeval":2,"median":24,"mean":"24.00"},"51":{"p25":24,"p75":24,"mode":24,"min":24,"std":"0.00","range":1,"max":24,"modeval":2,"median":24,"mean":"24.00"},"52":{"p25":24,"p75":24,"mode":24,"min":24,"std":"0.00","range":1,"max":24,"modeval":2,"median":24,"mean":"24.00"},"53":{"p25":24,"p75":24,"mode":24,"min":24,"std":"0.00","range":1,"max":24,"modeval":2,"median":24,"mean":"24.00"},"54":{"p25":24,"p75":24,"mode":24,"min":24,"std":"0.00","range":1,"max":24,"modeval":2,"median":24,"mean":"24.00"},"55":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"56":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"57":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"58":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"59":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"6":{"p25":16,"p75":28,"mode":18,"min":4,"std":"8.65","range":34,"max":37,"modeval":5,"median":18,"mean":"20.75"},"60":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"61":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"62":{"p25":21,"p75":21,"mode":21,"min":21,"std":"0.00","range":1,"max":21,"modeval":2,"median":21,"mean":"21.00"},"63":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"64":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"65":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"66":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"67":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"68":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"69":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"7":{"p25":16,"p75":26,"mode":16,"min":4,"std":"8.17","range":34,"max":37,"modeval":4,"median":19,"mean":"20.04"},"70":{"p25":19,"p75":19,"mode":19,"min":19,"std":"0.00","range":1,"max":19,"modeval":2,"median":19,"mean":"19.00"},"71":{"p25":17,"p75":19,"mode":17,"min":17,"std":"1.00","range":3,"max":19,"modeval":1,"median":18,"mean":"18.00"},"72":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"73":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"74":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"75":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"76":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"77":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"78":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"79":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"8":{"p25":17,"p75":28,"mode":17,"min":10,"std":"7.72","range":28,"max":37,"modeval":4,"median":19,"mean":"21.83"},"80":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"81":{"p25":17,"p75":17,"mode":17,"min":17,"std":"0.00","range":1,"max":17,"modeval":2,"median":17,"mean":"17.00"},"82":{"p25":16,"p75":16,"mode":16,"min":16,"std":"0.00","range":1,"max":16,"modeval":2,"median":16,"mean":"16.00"},"83":{"p25":16,"p75":16,"mode":16,"min":16,"std":"0.00","range":1,"max":16,"modeval":2,"median":16,"mean":"16.00"},"84":{"p25":16,"p75":16,"mode":16,"min":16,"std":"0.00","range":1,"max":16,"modeval":2,"median":16,"mean":"16.00"},"85":{"p25":8,"p75":16,"mode":8,"min":8,"std":"4.00","range":9,"max":16,"modeval":1,"median":12,"mean":"12.00"},"86":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"87":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"88":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"89":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"9":{"p25":16,"p75":32,"mode":16,"min":7,"std":"8.78","range":30,"max":36,"modeval":4,"median":19,"mean":"22.38"},"90":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"91":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"92":{"p25":8,"p75":8,"mode":8,"min":8,"std":"0.00","range":1,"max":8,"modeval":2,"median":8,"mean":"8.00"},"93":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"94":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"95":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"96":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"97":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"98":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":2,"median":29,"mean":"29.00"},"99":{"p25":29,"p75":29,"mode":29,"min":29,"std":"0.00","range":1,"max":29,"modeval":1,"median":29,"mean":"29.00"}},"complvals":{"dust":{"maxval":100,"minseq":"NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGAGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC","minval":2,"maxseq":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"},"entropy":{"maxval":81,"minseq":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","minval":0,"maxseq":"NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGAGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC"}},"dubscounts":{"1":{"0":1},"3":{"0":1}},"dubslength":{"100":{"0":4}},"qualsmean":{"27":1,"11":1,"32":1,"33":2,"18":1,"29":1,"17":4,"20":1},"tagprob":{"3":33,"5":33},"compldust":{"4":2,"3":2,"23":4,"100":1,"2":1,"5":2},"complentropy":{"81":1,"35":4,"77":1,"0":1,"73":3,"76":2},"dinucodds":{"AATT":"0.395437960","AT":"0.362329006","AGCT":"0.485808170","CATG":"1.073571725","GATC":"0.433830048","CCGG":"0.300572486","CG":"1.916620315","TA":"1.833186173","GC":"0.582918467","ACGT":"2.437785575"},"tail":1,"freqs":{"3":{"11":{"A":8,"T":50,"N":8,"C":16,"G":16},"7":{"A":16,"T":33,"N":0,"C":25,"G":25},"17":{"A":16,"T":0,"N":8,"C":50,"G":25},"2":{"A":8,"T":16,"N":0,"C":33,"G":41},"1":{"A":25,"T":8,"N":0,"C":33,"G":33},"18":{"A":8,"T":8,"N":8,"C":16,"G":58},"0":{"A":41,"T":33,"N":0,"C":16,"G":8},"16":{"A":50,"T":33,"C":0,"N":8,"G":8},"13":{"A":16,"T":8,"N":8,"C":33,"G":33},"6":{"A":16,"T":8,"N":0,"C":25,"G":50},"3":{"A":25,"T":41,"N":0,"C":0,"G":33},"9":{"A":16,"T":8,"N":0,"C":58,"G":16},"12":{"A":50,"T":33,"C":0,"N":8,"G":8},"14":{"A":8,"T":16,"N":8,"C":25,"G":41},"15":{"A":33,"T":41,"N":8,"C":8,"G":8},"8":{"A":50,"T":25,"N":0,"C":8,"G":16},"4":{"A":41,"T":16,"N":0,"C":25,"G":16},"19":{"A":16,"T":41,"N":8,"C":8,"G":25},"10":{"A":8,"T":33,"C":0,"N":8,"G":50},"5":{"A":33,"T":8,"N":0,"C":50,"G":8}},"5":{"11":{"A":16,"T":50,"N":0,"C":33,"G":0},"7":{"A":8,"T":33,"N":8,"C":25,"G":25},"17":{"A":8,"T":41,"N":0,"C":33,"G":16},"2":{"A":8,"T":0,"C":16,"N":8,"G":66},"1":{"A":50,"T":0,"N":8,"C":41,"G":0},"18":{"A":16,"T":8,"N":0,"C":0,"G":75},"0":{"A":50,"T":41,"C":0,"N":8,"G":0},"16":{"A":50,"T":8,"N":0,"C":16,"G":25},"13":{"A":16,"T":50,"N":0,"C":33,"G":0},"6":{"A":25,"T":0,"N":8,"C":8,"G":58},"3":{"A":50,"T":41,"C":0,"N":8,"G":0},"9":{"A":8,"T":25,"N":8,"C":33,"G":25},"12":{"A":41,"T":0,"N":0,"C":8,"G":50},"14":{"A":33,"T":0,"N":0,"C":25,"G":41},"15":{"A":8,"T":50,"N":0,"C":33,"G":8},"8":{"A":58,"T":8,"C":0,"N":8,"G":25},"4":{"A":41,"T":25,"C":16,"N":8,"G":8},"19":{"A":16,"T":75,"N":0,"C":0,"G":8},"10":{"A":16,"T":8,"N":0,"C":0,"G":75},"5":{"A":16,"T":25,"N":8,"C":50,"G":0}}}} \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example1.html Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,7035 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> +<title>PRINSEQ-graphs Report</title> +<style type="text/css"> +<!--/* <![CDATA[ */ + +html, body, div, span, p, img { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +html, body { + font-family: Arial, Verdana; + color: #40454b; + font-size: 12px; + text-align: center; +} + +img { + padding: 0px; margin: 0px; border: none; +} + +.info-panel { + margin-top: 10px; + margin-bottom: 10px; + width: 740px; + text-align: left; +} + +.info-header { + padding-top: 20px; + padding-top: 10px; +} + +.info-header-title { + color: #126499; + text-decoration: none; + font-family: sans-serif; + font-weight: bold; + font-size: 16px; + vertical-align: baseline; + margin-right: 20px; + margin-bottom: 25px; + margin-top: 15px; +} + +.info-content { + padding: 2px; + font-family: "lucida grande",sans-serif,arial; + margin-top: 15px; + margin-bottom: 15px; +} + +.info-table-type { + min-width: 70px; + padding: 4px; + vertical-align: top; +} + +.info-table-value { + font-weight: bold; + padding-top: 4px; + padding-left: 10px; + padding-right: 10px; + vertical-align: top; +} + +hr { + background-color: #E0E0E0; + border: medium none; + color: #E0E0E0; + height: 1px; + outline: medium none; +} + +.sequencetext { + font-family: courier, "courier new"; + font-weight: normal; +} + +/* ]]> */--> +</style> +</head> +<body> +<center><h2>PRINSEQ-graphs v0.6 HTML Report </h2>[Generated: 03/13/2013 12:12:36]<br /><br /><div class="info-panel"><div class="info-header"><span class="info-header-title">Input Information</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Input file(s):</td><td class="info-table-value">example1.fastq</td></tr><tr><td class="info-table-type">Input format(s):</td><td class="info-table-value">FASTQ</td></tr><tr><td class="info-table-type"># Sequences:</td><td class="info-table-value">12</td></tr><tr><td class="info-table-type">Total bases:</td><td class="info-table-value">1,150</td></tr></tbody></table></div><hr><div class="info-header"><span class="info-header-title">Length Distribution</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"> <tbody><tr><td class="info-table-type">Mean sequence length:</td> <td class="info-table-value">95.83 ± 37.96 bp</td></tr><tr><td class="info-table-type">Minimum length:</td> <td class="info-table-value">50 bp</td></tr> <tr><td class="info-table-type">Maximum length:</td><td class="info-table-value">200 bp</td></tr> <tr><td class="info-table-type">Length range:</td><td class="info-table-value">151 bp</td></tr> <tr><td class="info-table-type">Mode length:</td> <td class="info-table-value">100 bp with 8 sequences</td></tr></tbody></table><br><img border="0" src="data:image/png;base64,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 +//79SktL04ABA3zdlRumsLBQjRs31rJlyzRo0CAlJyf7ukuWeuWVVzRmzBitWrVKY8eO1auvvurr +LsFibL/si+0X26/rQUANcKdOndKECRM0ffr0YocdateurYyMDEnS6dOnVatWLV910Wt2796tw4cP +q3///urfv7/Onz+v/v37y+12S7LnmOvWravevXtLknr16qWDBw96ptlxvLt27VKvXr0k/TLePXv2 +eKbZcbyXu9IY7Th+tl9svyT7jLeyb7+8jYAawHJzcxUfH6+xY8eqdevWxabZ8alajz32mNasWaOV +K1dq5cqVcrlcWrlypef8JjuOuXPnztq2bZukX656btSoUbFpdhtvgwYNPOPdunWr6tev75lmx/Fe +7kpjtNv42X6x/bLbeCv79svbuFF/AFu8eLHefPNNzzk9kvTee+/J6XRWiqdqdenSRV9++aXnZzuO +OScnRy+88IJ+/PFHBQcH66WXXlLLli0l2XO8+/bt07Rp05Sfn6+QkBBNmjRJsbGxkuwz3nnz5mn1 +6tXKyMhQ7dq11a9fP8XFxUm68hgDdfxljdeu268rrd9L2WX7daXx2nH7daXxVobt141EQAUAAIBf +4RA/AAAA/AoBFQAAAH6FgAoAAAC/QkAFAACAXyGgAgAAwK8QUAFclw0bNsjhcCg7O9vXXbkuReOo +yCMIr+V3rFjG1UyZMkVDhw6t8O9Z3bcbMXZv8HY/27dvrw8++MArywLsioAKBLiiL8+i10033aS+ +fftq//79vu6aJP8KId4O0507d9aJEycUFRXlleVZ4aefftLMmTP1H//xH562yz8zVatWVdeuXbVr +165iv2v1+Hz1/iUkJCg2NlYhISGqVauWfv/73+unn366YfUnTpyoF154QdzlESgbARWwiX379unE +iRNKTU2V2+3W4MGDfd0l2wsJCVHdunXlcDh83ZUyLVq0SLGxsYqJiSkxregzs337dlWrVq3EZ8bq +8fnq/duzZ4+Sk5N18OBBrVy5Utu3b9fjjz9+w+r3799fp06d0meffXbDagKBhoAK2ER0dLTq1q2r +O++8U3/605904MABnT9/vtg8c+fOVatWrRQSEqIGDRroxRdfVGFhoWf6O++8o3bt2ik0NFQ1atTQ +0KFDi+1tLCgo0Pjx41W7dm1Vq1ZNAwYM0A8//HDdfb9av4r2+K1bt07t27dXaGioOnbsqAMHDnjm +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 +BznSs8jRmsfbAAAAAElFTkSuQmCC +" /> +</div><hr><div class="info-header"><span class="info-header-title">GC Content Distribution</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Mean GC content:</td> <td class="info-table-value">48.17 ± 14.83 %</td></tr> <tr><td class="info-table-type">Minimum GC content:</td> <td class="info-table-value">0 %</td></tr> <tr><td class="info-table-type">Maximum GC content:</td> <td class="info-table-value">57 %</td></tr> <tr><td class="info-table-type">GC content range:</td> <td class="info-table-value">58 %</td></tr> <tr><td class="info-table-type">Mode GC content:</td> <td class="info-table-value">50 % with 5 sequences</td></tr> </tbody></table><br><img border="0" src="data:image/png;base64,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 +2rVrKycnR5K0fft23z7JyYHoGQAAAH4y4yDdunUzXq/X9/2tt9562f06dOhAO+2000477bTTTnsF +tPuTo4Lrr371K3PixAljjDHZ2dlm4MCBAe5RSRXxglKXutSlLnWpS13qOpWj5rh27txZa9eulSSt +WbNGnTt3DnCPAAAA4C8uY4wJdCf85cyZMxo/frxOnTql2rVra8aMGapevXqguwUAAAA/cFRwBQAA +gHM5aqoAAAAAnMtRy2Hh/yxcuFAZGRnKzs7W1q1bS2xz2h3Gtm/frtmzZ6uoqEhut1vjx49X27Zt +JTlvrMX+9re/KT09XS6XS5I0atQo3XLLLZKcO2ZJeuaZZ5Senl7iPe3E8Xbu3FkNGzaUJP32t79V +v379JDlzrMUWLlyo999/X8YYDRw4UPfee68k54559uzZvqUav/nmG+Xm5iozM9OR492wYYPmz58v +SXK5XBoxYoS6desmyZmv7/79+5WSkqLCwkLVr19fU6ZMUVhYmCRnjrfCBfSjYbAmKyvLnDx50nTp +0qXUttmzZ5vXXnvNGGPMa6+9ZubOnVvR3fOrAwcOmFOnThljjNmxY4cZMGCAb5vTxlosPz/f9/Wh +Q4dMr169fN87dcz/+te/zIQJE0q9p5043sv93BrjzLEaY8xbb71lJk+ebIqKiowxxuTm5vq2OXXM +F1u+fLlJSUkxxjhzvL169TIHDx40xhjz+eefm969e/u2OXG89913n/nwww+NMcb8z//8j3n++ed9 +25w43orGVAGHatWqle9mDJe60h3GglXjxo1Vs2ZNSVLr1q116tQp3zanjbVY8f/eJencuXOqW7eu +73snjvnChQuaO3euxo4dW2qbE8d7JU4d68qVK/XAAw/I7f7un6TIyEjfNqeO+WLvvvuub4xOHG90 +dLTOnj0r6bsrjjfccINvmxPHe/jwYf3iF7+QJN18880lxuTE8VY0pgpcg650hzEnWLVqle9P5pKz +x7p8+XItX75c58+f10svveRrd+KYFyxYoHvuucf3H5SLOXG8xhgNGTJE4eHhmjBhgmJiYiQ5c6zS +d//Qv/POO1q/fr1q1KihiRMnqn79+pKcO+Zix44d07Fjx3y3JHfieJ966ikNHTpULpdLxhgtWrTI +t82J423cuLHee+89/fKXv9R7772n48eP+7Y5cbwVjSuucIz9+/dryZIlSkxMDHRXKsRvfvMbvfXW +Wxo9erSefvrpQHfHmr1792rfvn268847A92VCpORkaGlS5fq7rvv1pQpUwLdHeuKiorUoEEDLV++ +XAMGDFBqamqgu1Rh1q1bp/j4eN/VZid65plnNHr0aL399ttKSEjQzJkzA90lqyZNmqSVK1dq0KBB +OnDggCpVqhToLjmKc39ScEVRUVHKzs6WJOXk5Kh27doB7tFPd+LECU2YMEHTp08vMUXCiWO9VJ8+ +ffTxxx/7vnfamHfu3KlDhw6pf//+6t+/v7755hv1799fXq9XkvPGK0k1atSQJPXu3VsHDx70tTtx +rJL0s5/9TL169ZIkxcfH69NPP/Vtc+qYi108TUBy5ng/+ugjxcfHS/ru9d21a5dvmxPH26hRI730 +0kv661//qjvvvFM33nijb5sTx1vRCK7XIKfdYSw/P1+JiYlKSEhQbGxsiW1OG2uxY8eO+b7euHGj +70/JkvPGPGTIEK1du1YZGRnKyMiQx+NRRkaG7wqV08abl5cn8/+X1/7www/VoEED3zanjbVY586d +tW3bNknfrRJy8T/0Th2zJB06dEjnzp1Tq1atfG1OHG90dLTv9d26davq1avn2+bE8X711VeSvpvy +88orr6h///6+bU4cb0XjBgQONW/ePK1Zs0bZ2dmKiopS3759NXLkSEnOu8PYkiVL9NJLL/nmxEnS +G2+8Ibfb7bixFps+fbp27twpY4wiIyNLzIN06piLde3aVZs2bfJ977Txrl27VmlpaZIkj8ejJ598 +Us2aNZPkvLEWO3v2rCZNmqQvv/xSoaGhmjx5suPHLEkvvviijDF69NFHfW1OHO+ePXs0depUXbhw +QZUrV1ZSUpLi4uIkOXO8b775ppYtW6ZKlSqpW7duGjFihG/pQieOt6IRXAEAABAUmCoAAACAoEBw +BQAAQFAguAIAACAoEFwBAAAQFAiuAAAACAoEVwBwsClTpui+++4LdDcqTIcOHfTmm28GuhsALCG4 +AgiYr776SpMnT1bbtm0VHh6uKlWqqHHjxnrggQd8C5YX++KLLzR8+HDdeOONqly5surUqaOBAwfq +f//3f7+3xo993o+xfv16uVwu5eXl+f3YP6bG6dOnNWvWLD355JMl2p999lnFxMSoSpUqat26tVau +XFnm+g8//LD+67/+S9WrV79iP8py/B/aJz09XY0bN1ZoaKjat29f4v1QUFCg1q1bKz09vdRxJ06c +qEmTJomVHgFnIrgCCIhjx46pQ4cOev/995WcnKzdu3fr008/1euvv66YmKcSr94AAAe1SURBVJgS +96s/ePCgOnTooOPHj+uNN97QwYMH9c4776hp06ZKTk6+Yo0f+zynePnllxUXF6cWLVr42ubNm6eU +lBTNnDlT//73v/Xwww/r3nvv1YYNG8p0zKKiIg0aNEiTJk267PayHP+H9jl58qSGDBmie++9V598 +8oliYmI0aNAg3/NnzZqlRo0a6Ve/+lWp+v3799eJEyf03nvvlWk8AIKMAYAAuOuuu0z37t1NYWHh +Zbd7vV7f17fffrvp27fvZffLzc29Yo2yPq+goMAkJSWZ6OhoExoaapo1a2YWL15cYv/MzEwjybz7 +7rumffv2pnLlyqZjx45m3759vn0klXpcbO7cuaZZs2YmNDTU1KtXz0yaNKnE+P1R42Lt27c3M2bM +8H3v9XpNdHS0mTZtWon9Bg8ebPr163fF41xOcV8vPo9lOX5Z9vnwww+NJHP06FFjjDFr1qwxkkx+ +fr45cOCAiYqKMkeOHLli3wYPHmwefPDBco0HQHAguAKocKdPnzZut9usWbPmB/fNyckxLpfLvPvu +u+WqUZ7nPfrooyYqKsqsWrXKHD582CxatMhUqVLFpKWl+fYpDmqdO3c2W7ZsMZ988om5+eabTY8e +PXz7pKenG0lm//795j//+Y/5z3/+49s2efJk07x5c7NmzRpz9OhR895775mGDRuaiRMn+q3Gxc6c +OWNcLpd5//33fW2fffaZkWS2b99eYt9XX33VXHfddT94ni52ueBaluOXZZ+cnBzj8XjMwoULTVFR +kRk1apRp3ry5McaY+Ph4M2fOnO/t23PPPWcaNWpUrvEACA4EVwAVbuvWrSWuqBW7++67TbVq1XyP +vLw8889//vOy+/6Qsj4vLy/PhIaGmtdff71E+7hx43xhyZj/C2offPCBr+2vf/2rCQkJMQUFBSX2 +ufQqcH5+vqlatarZvHlzifalS5eamjVr+qXGpf71r38ZSebTTz/1tW3evNlIMseOHSux77p164wk +c+7cue895sUu14+yHL+sfVi9erVp166dqVu3runevbvJysoyS5YsMR07djTbtm0znTt3NvXr1zf9 ++vUzX375ZYljpaenG5fLZS5cuFDm8QAIDsxxBXDV+Mtf/qKdO3dq4cKFys/Pr5AP2Ozbt08FBQXq +3r17ifbu3btr//79+vbbb0u0x8XF+b6uU6eOCgsLlZ+f/7019uzZo/Pnz6tXr14KDw/3PR588EGd +Pn1aZ8+e/ck1LlV8zPDw8FLbXC7X9z734j5e7vk/5IeOX5Z9+vXrp48++kjHjx/X+vXrdcMNN2jc +uHGaN2+eBgwYoP79++vzzz9XRESEHnjggRLPjYiIkDGm1HkFEPxCAt0BANeeJk2ayO12a9euXYqO +jva1X3/99ZK+Wwng4n1dLpf27t1bYt+y1Pgxz/shbnfp/+//UMD2er2SpLVr1+pnP/tZqe1hYWE/ +ucaligPn119/7atZfH6PHTtWoh/Hjh3Tddddp6pVq0qSdu7cWa5axcpy/LL24VJ/+tOf9Nvf/lYh +ISH68ssvdd9998ntdmvIkCG6++67VVBQoNDQUEnSmTNn5HK5flToBnB144orgApXs2ZN3XHHHZo+ +fboKCgq+d99atWopPj5ec+bMuez2Ky0LVdbnxcbGKjQ0tNSn6jds2KAWLVqoSpUqPzQcn0qVKkn6 +v6BaLC4uTh6PR0eOHFGTJk1KPS4XVMtb41LFwf3w4cO+tgYNGig6Olrr1q0rse+6devUpUuXEs+9 ++FFWZTl+WftwsQ0bNigzM1MpKSkqKiqSJN/75sKFC/J6vSXOx+HDhxUTE+MLsgCcgyuuAALiL3/5 +i7p06aKuXbtq7Nix+vnPf64qVaro6NGjeuWVV+RyuXyBbv78+brlllt011136fHHH1dMTIxycnK0 +cuVK7dixQ2+//fZla5TleREREXr44Yc1duxY1ahRQ23bttW6des0d+5cvfjii+UaU4MGDSRJq1at +Ur9+/eRyuVS7dm2Fh4dr/PjxGjVqlIqKitStWzcVFBRox44d2r9/v/785z//5BqXql69utq1a6dt +27YpPj5e0nd/nn/iiSeUlJSkpk2b6qabblJGRoZWrFhR5uWjiq/GHjhwQJKUlZXlq1WW45e3D99+ ++62GDx+u+fPnKywsTG3atFGtWrU0a9YsPf7447730cX/wdi2bVupqR8AHCKwU2wBXMtyc3PNk08+ +aVq1amWqVq1qqlSpYho3bmwefPDBUp86P3LkiBk6dKipV6+eCQkJMVFRUWbgwIFmx44d31ujLM8r +KCgwEydONPXq1fMth7Vo0aISxyn+MFJ2dnaptos/oPTUU0+Z66+/3rjd7lJLVS1cuNC0adPGVK5c +2VSrVs106tSpRB1/1LjYjBkzTKdOnUq1z5w50zRo0MCEhoaauLg4k56e/n2nsARdZjmuS/tQluOX +tQ+TJ082gwYNKtH2wQcfmObNm5vQ0FDTuXNnc+DAAd+2b7/91tSoUcOsXbu2zGMCEDxcxnB7EQBw +olOnTikmJkb//Oc/1bJly0B3p0Kkp6crKSlJn3zySZk+JAYguDDHFQAcqlatWho7dqymTp0a6K5U +mGnTpmnKlCmEVsChuOIKAACAoMAVVwAAAASF/weuq89m7fnaSQAAAABJRU5ErkJggg== +" /> +</div><hr><div class="info-header"><span class="info-header-title">Base Quality Distribution</span></div><div class="info-content"><img border="0" src="data:image/png;base64,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 +qJHuvfdeNW/eXFJwl7nY7t27tXv37tDXHAdxeR9++GGNHDlSSUlJchxH8+fPD00L4vK2bt1ar776 +qvr166dXX31V3377bWhaEJc33jiTCV9s375dS5Ys0fjx4/3uSlwMHTpUL730ksaOHatp06b53Z2Y +2bp1q7Zt26Ybb7zR767EzcqVK7V06VL9/Oc/15QpU/zuTsydOXNGLVq0UHZ2tm666SY99NBDfncp +btauXavevXuHzuIG0WOPPaaxY8fqlVde0bhx4/T444/73aWYuv/++/Xiiy9qyJAh+vTTT1WzZk2/ +uxQowd1SAiCo3360Z88eTZo0SVOnTi11q0BQl7ekvn376sMPPwz9HbRl3rx5sz7//HMNHDhQAwcO +1IkTJzRw4EAVFRVJCt7ySlKjRo0kSTfccIM+++yzUHsQl1WSmjVrpj59+kiSevfurU8++SQ0LajL +XKzkpXIpmMv7n//8R71795Z09vPdsmVLaFoQl/fiiy/WvHnztGzZMt1444266KKLQtOCuLzxRpJp +sCB++1FBQYHGjx+vcePGqW3btqWmBXF5pbOX2Iq99dZbocupUvCWOSMjQ6tXr9bKlSu1cuVK1alT +RytXrgyd+Qna8h46dEjO/5Uafvvtt9WiRYvQtKAta7H09HS9++67ks5Wiyh5UA7qMkvS559/rmPH +jumqq64KtQVxeS+88MLQ57thwwZdcMEFoWlBXN7Dhw9LOnvbyzPPPKOBAweGpgVxeeONYuw+mzlz +platWqV9+/YpLS1N/fv31+jRoyUF89uPlixZonnz5oXu4ZKk559/XjVq1Ajk8krS1KlTtXnzZjmO +o+9///ul7tsL6jIX6969u/71r3+F/g7a8q5evVqLFi2SJNWpU0f33XefLrvsMknBW9ZiR48e1f33 +369du3YpOTlZDz74YOCXWZKefvppOY6jUaNGhdqCuLwfffSR/vSnP6mwsFApKSn64x//qCuvvFJS +MJf373//u/7617+qZs2a6tGjh+68885QubkgLm+8kWQCAADAc1wuBwAAgOdIMgEAAOA5kkwAAAB4 +jiQTAAAAniPJBAAAgOdIMgEE1rp165SUlKRDhw4Z0Y9IvpbOzbzx6hMARIMkE0DMFCcyxT/f+973 +1LdvX23dutXvrsVVenq6vvnmGzVp0kRS5clv2Xnj1adoLF++XK1bt1ZycrJ+9KMfhYp4S9KpU6fU +rl07LV++3IvuArAQSSaAmPvoo4/0zTffKCcnR0VFRRo0aJDfXYqrlJQUNWvWLFTk2at549Wniuzd +u1cZGRkaPHiwPv74Y7Vq1UpDhgwJTZ8+fbouvvhi/eIXv/CqywAsQ5IJIOaaNm2qZs2a6Uc/+pHu +uecebd++XSdOnCg1z5NPPqk2bdooJSVFF154oR544AGdOXMmNP25555Thw4dVLt2bTVq1EjDhg0r +dSbw9OnTyszMVFpamurVq6cbb7xRX3/9daX9Kj6j+Nprryk9PV116tRRixYtNHPmzFLznT59Wvfd +d5+aN2+ulJQUtWnTRgsXLiw1z9y5c3XRRRepVq1auuCCC/TnP/+53PsUX5ru1auXpLPfe158ljfc +vJG8d/Fr1q5dqx//+MeqXbu2OnXqpO3bt1e57MXv4zbGJ598osLCQt1555265JJLNHLkSO3cuVPH +jh3TZ599pj//+c/lxhFAgnEAIEZycnIcSc6+ffscx3GcQ4cOOcOHD3fatm1bar4HH3zQadOmjbNq +1Srnq6++cl599VWnZcuWzr333huaZ/Hixc7rr7/ufPnll866deucq666yhk2bFho+tixY52mTZs6 +K1ascL744gtn7ty5TmpqqiPJOXjwYKX9u+SSS0Kvmz9/vlO7dm1n0aJFoflGjRrlpKWlhZ1nx44d +TlJSkjN16lRn586dznvvveesWLEi7DgsX77ckeRs377d+eabb5xvvvkm7LxVvXfJ16Snpzt5eXnO +xx9/7FxzzTVOz549I/5s3MbIz8936tSp48ydO9c5c+aMM2bMGKdNmzaO4zhO7969nb/85S9h3xtA +YiDJBBAzxYlLvXr1nHr16jmSnMsuu8z59NNPQ/MUFBQ45513npObm1vqtUuXLnUaN24cNvaLL77o +1KtXzykqKnIOHz7spKSkOIsXLy41T2ZmZkRJZtnXTZgwwbn88ssdxzmbGCcnJ1c4T3FS9d577zmS +nC1btlT6PmUTuor6VXLeSN675GveeOONUNuyZcucWrVqOadOnXLVJzcxXn75ZadDhw7O+eef71x7 +7bXOBx984CxZssTp2LGj8+677zrp6elO8+bNnQEDBji7du2qMAaA4OJyOYCYy8nJ0aZNmzR79mzt +2LFDW7ZsCU376KOPdPz4cfXp00f169cP/dx+++06cOCAjh49Kklav369evfuraZNm6pBgwa6+eab +VVBQoKNHj2rbtm0qLCzUtddeW+p9iy9LV6Xs66699lpt27ZNJ0+e1LZt23Tq1KkK59m+fbtOnjyp +Dh06qFOnTurRo4eGDx+uv/3tb6Uu9Ucrkvcu6corrwz93rRpU50+fVoFBQWu3tNNjAEDBug///mP +vv32W61bt04//OEPNWHCBM2cOVM33XSTBg4cqJ07d6phw4b6zW9+46ofAOxXy+8OAAi+Vq1aKTU1 +VW3atNH27ds1fvx4DRw4UMnJySoqKpIkrV69Ws2aNSv32rp16+rQoUPq16+fBg0apClTpig1NVV5 +eXm67bbbSiVz0T7EUt2HbGrVqqX169drzZo1Wr16te644w4tXbpUL774YrXiulWjRvnzBo7jxC3G +H/7wB91yyy2qVauWdu3apWHDhqlGjRrKyMjQz3/+c506dUrJycmu+gPAXpzJBBBXd999t3bt2qW/ +//3vks6eOatTp46+/PJLXXLJJeV+atSooa1bt+rIkSOaMmWKunbtqksvvVR79+4Nxbz88suVkpKi +N998s9R7rVu3LqI+lX3dW2+9pcsvv1y1a9dW27ZtlZycXG6eN998MzSPJCUnJ+tnP/uZZs6cqblz +5+qll17S8ePHK3y/mjVrSlIowQ4n0vc2wZtvvqmcnBxlZWWFEv9Tp05JkgoLC1VUVFTl8gIIFs5k +Aoiriy66SAMHDtSTTz6pm2++WfXr19fEiRM1ZswYnTlzRj169NCpU6e0adMmbd++XQ888IBatmyp +mjVr6qmnntKoUaO0efNmPfnkk6GYDRs21O9+9ztlZmaqUaNGateunV599VU9++yzEfXpoYceUqNG +jXT11Vfr1Vdf1YwZM0JPRpeN3b59e61du1YzZszQ008/LUl699139e6776p3796qVauWVq5cqQsu +uEB16tSp8P1atGghSVqxYoUGDBigpKQkpaamlpsvkvc2wcmTJ3XHHXdo1qxZqlu3rq6++mo1adJE +06dP1z333KPZs2frJz/5iVFJMYA48PumUADBVfbhkmKvv/66I8l57733Qm1z5851rr76aiclJcWp +V6+e07lzZ2f+/Pmh6QsXLnR+8IMfOHXq1HGuu+4659lnny318ExhYaEzfvx4p0mTJs55553n9OvX +z1myZElED/6sWbPG6dKli1O7dm2nefPmzowZM0rNd+rUKefee+91LrjgAic5Odm57LLLSvVt69at +Tq9evZwGDRo4ycnJTpcuXZwNGzZUOg4PP/yw84Mf/MCpUaOGU3JXXHbeqt47XPzKHi6q6DXRxCj2 +4IMPOkOGDCnV9sYbbzht2rRxkpOTnfT09FIPewFIDEmO4/KGHQAIiHXr1qlXr17at29fhWcSAQDR +455MAAAAeI4kEwAAAJ7jcjkAAAA8x5lMAAAAeI4kEwAAAJ4jyQQAAIDnSDIBAADgOZJMAAAAeO7/ +A79t5wG6MWoxAAAAAElFTkSuQmCC +" /> +<br /><br /><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAApkAAAFtCAYAAABMRHHAAAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nO3de3QU9d3H8c+GJCAJ2ECCtIpAvQCiQlvAJhSECooo9pFWwAhogdYWAcFuecAb1wJqHn1Q +sCAXFTw02KIcUAS8ELVJREDBVoSDFRQBIQFREpEAmeePPBly281OMrszs/t+nZNzdn/zm5nvXHb2 +m7l812cYhiEAAADARnFOBwAAAIDoQ5IJAAAA25FkAgAAwHYkmQAAALAdSSYAAABsR5IJAAAA25Fk +AgAAwHYkmQAAALAdSSYAAABsF+90AAAQzTZuDK3f9deHNw4ENnWqvf0ASZoa4g4Taj8v4kwmALhY +RkaGxo0bV6ltwoQJysjIMN+PGDEi5OnNmjVLO3bsCGm6TujRo4ej87dq69atyszM1ODBg3X77bdr +x44d5rCMjAxlZmYqMzNTr776qtm+dOnSStMIdZmrjheqxx9/3Ixj4MCB6t27d1jic6uqy1Px8+Lm +ZbP7M9qrVy/ztZVjRn1wJhMAXKxBgwY6evSojh07pmbNmunrr7/WV199pcTERLOPleTj3//+tyZN +mhTSdFG7lJQUzZs3T82aNdMHH3ygadOm6aWXXpJUtu1WrFhRbZxnn322Tl/ydR3vvvvuM1+vXLlS +u3fvDkt8digtLVVcnL3nv6ouT12T9UgL52c0UuuAM5kA4HI33HCDNv7/dfeNGzfq+irX1iuejenR +o4eee+45DR8+XLfccov++c9/msP27t2riy++2PwSr226a9eu1fDhwzVkyBDdcccd2rlzpyRp586d +GjJkiEpKSnTy5En95je/0X/+859K4z711FN68cUXzffPPPOMli9fHnS6VVU9y1TxTMyxY8c0btw4 +DR48WHfccYc++eSTAGsvvC655BI1a9ZMknTVVVfp6NGjQfsvWLBAp06dUmZmpvx+v9keaJsFG+/Q +oUMaMWKEBg8erJEjR+rQoUO1xrthwwb169fP9viksu315JNPKjMzU0OHDtXBgwfNYcG2V48ePTRv +3jwNGzZM27Zt07FjxzR+/HgNGjRIQ4YM0datW0OaRk0x1rQ8gc5eumWfqqi2z2iwmA8ePKihQ4cq +MzNTTz75ZKXxKq6DYJ/HYMeTUJBkAoDL9evXT+vXr5ckvfbaa+rfv3/AvmfPnlWLFi20bNkyzZ49 +W3PnzjWH5eXlVbrUVtt0e/XqpWXLlik7O1tTp07VI488Ikm64oor1LNnTz399NOaO3eubrrpJl1y +ySWVxr3++uv1xhtvmO/feOMN8wsy0HStyMrK0rBhw7Ry5UpNmzZNs2fPtjwNu61Zs0bdu3c33xuG +oczMTP3+97/X3r17JUl/+MMf1LBhQ61YsUJZWVmSgm+zcjWN99hjj+lXv/qVVq5cqVtuuUWPPfZY +0PgOHjyogwcPqkuXLrbHV96vdevWWrFihW677TZzfCn49jp79qwuueQSLV++XF27dtVjjz2mn/70 +p3rxxRf1t7/9TR06dAhpGjXFWNPyBOLGfaq2z2iwmLOysnTbbbdpxYoVat26tUpKSmqcR7DPY6jb +PhAulwOAy7Vo0UKNGzfW22+/rUaNGumCCy4I2Nfn85nJXMeOHVVQUGAOy8/P15QpU0Ke7r59+zR/ +/nwdO3ZM8fHx+vLLL81hv/vd7zR8+HAlJiZq4sSJ1eJo166djh07poKCAn399ddq0qSJOf1g0w3V ++++/r3379pnvi4uLLU/DTrt379by5cu1aNEis23t2rVKSUnRunXrNGPGjICXKINts2C2b9+uWbNm +SZJuvPHGamerqtq4caP69OljnskOR3w33HBDjfHUtr2uu+468/XmzZv10EMPmfNOSkqqdRp1XYcV +uW2fkmr/jAaLuer+8eijj9Y4j2Cfx/quV5JMAPCAm266SdOnT9e9994btF9cXJzi46sf2r///nud +OHFCaWlpIU/3oYce0rRp09SpUyeVlJSYD4xI0jfffKPvvvtOZ86c0alTp3TeeedVG79Pnz568803 +dfToUTP5qG26VRmGIZ/Pp7Nnz+rs2bNme2lpqZYuXapGjRoFXR+RcPjwYU2ePFmzZ8+utH5TUlIk +lSVewc7WBtpmdtuwYYMeeOABR+ILtr0aNGhQ6T5Dn89neRrhjtFJwT6jdsQc7PNY3/XK5XIA8IDe +vXtr2LBh6tOnT53G37p1q3mZNNTpfvfdd2rRooUk6eWXX5ZhGOawmTNn6o9//KNuvPFGPfXUUzXO +8/rrr9fGjRv15ptvVpp+sOlW1LJlS/P+sI0bN1ZKMrt162Y+YCPJvNwbacXFxZowYYLGjx9vXtaV +pOPHj5vL9c9//lOtW7c2hyUkJOjUqVOW51V1vM6dO5v3661fv16dOnUKOO5nn32m7777TldeeWXY +4pNkxrNhwwZ17tzZbLeyva655hr94x//kFT2T0b52bm6bvNQl8ct+1RVwT6jwWKuuH9s2LAh4Ocs +1M9jXZBkAoAHNG7cWHfddZcaN25cp/Gr3o8ZynTHjh1rXhb/9ttvzbNNa9asUWJiovr166e77rpL +H3/8sbZs2VJt/B//+McqLi5Wy5YtzYdjgk23qnvvvVeTJ0/W8OHD9eWXX1bqN3HiRL3//vsaNGiQ +Bg0apNdee83yOrHDSy+9pP3792vBggVmOaDS0lK99957Gjx4sAYNGqQlS5bowQcfNMcZOHCghgwZ +UunBmlBUHc/v92v16tUaPHiwVq9eHXR6GzZsqHQ2ORzxNWjQQJ9//rkyMzOVnZ2tP/3pT+YwK9vL +7/dr69atGjRokDIzM7Vr1y7L06go1OVxyz5VVbDPaLCY//SnP2nlypXKzMzU3r17A37OQv081oXP +sDNlBQBU4pZi7HfccYeef/75iFyW9RqKsdujR48eevfdd50OwzUoxk6SCQAAbECSiaocu1z+6KOP +6pprrqnUduLECY0ZM0ZDhgzR2LFjXfFkFwAAqB0JJqpyJMn88MMPdfz48WrX/RcvXqxu3bopOztb +Xbt21ZIlS5wIDwAAAPUU8SSzpKREc+fOrfEG3Ly8PPOXCPr372+5sjwAAADcIeJ3gC9YsEADBw6s +9KRhuSNHjpg1xlJTU1VYWGgOq1h6o/wnpgAAAOBOEU0yd+7cqV27dmncuHGWx62YWBYVFdkZFgAA +QExLTk62fZoRvVy+fft2ffbZZxowYIAGDBig77//XgMGDFBpaakkKS0tzfzJosLCQqWmpkYyPAAA +ANjE0RJGVcsdPP7440pNTdXw4cO1bNkyHTt2TOPHj682HmcyAQAA7OP5M5m1GTVqlPkrBJs3b9bI +kSOdDgkAAAB14Mli7JzJBAAAsE/Un8kEAABAdCDJBAAAgO0iXifTLps2JSsxsexKf/fu/PxkuARa +z1bbAQBAbPFskpmYaJDERECg9Wy1HQAAxBYulwMAAMB2PF0OAAAQ43i6HAAAAJ5AkgkAAADbeTbJ +zM1NcjqEmBBoPVttBwAAscWzT5cjuIrJHk97AwCASCPJjGIklwAAwCmevVwOAAAA96KEUZTKzU3i +TCYAAAhJOEoYkWQCAADEOOpkAgAAwBM8m2RSKicyKGEEAADqwrNJJoIj2QMAAE6KuhJGmzYlKzGx +7DbTig++eKU93JyKx6n15tR03Lb/uC3Oqu1ZWdXvBUpPN8xx3BJnXdsBIBZFXZKZmGjUeHD3Snu4 +ORWPU+vNqem4bf9xW5w1taenn3sGMT/f53g8drYDQCzy7OVyDuSREWg9W20HAACxhRJGAByXlZVc +7UxmxcvlAIDwooQRAAAAPMGzSSZPT0cGJYwAAEBdeDbJDMSupMipdrtEazxW43RqOm7bf9wWZ7TG +zz9ZAHBO1D1dXlXF0ij5+WWv/X733tNZ8Uuq4v1oVtsRXnbtV4GmU9fph7o/WJ1vuNsBANEn6pNM +qXpplNzcJFcnZDzR7Q127Vc1Tac+0w81BivzjUQ7ACC6ePZyOYlVZJDwAgCAuvBskhmI1STHriTK +bclYtMYT7u1rdTrhnq/V6dvV323c9jnlnywAqF3UJZlex5ca6oP9AQDgFp5NMrmPKzJ4uhYAANSF +Z5PMQLxeGsUu0RqP20oYhXu+VqdvV3+3cdvnlH+yAKB2UZdkev1eNbd9qXH53p0CrWeSHACAW0RN +CaOK9ffKVSyVEmp/kqQygdZPfr7PUnuk1uemTclKTCzb3tG8DdlvAQBe4dkks6Yv1ar192pjtX+s +CbR+rLZHQmJi7CRa7LcAAC+IusvldvF6qZNojYcSRnXj9QTcbSWJ3LZ9AcCNSDJdhi+1umE9lGE9 +AADcwrNJJg84AAAAuJdnk8xw83qpk2iNhxJGdeP1f8rcVpLIbdsXANyIJNNl+FKrG9ZDGdYDAMAt +PPt0ebhULBGTn1/22u8vcioc/D+2S2xiuwOAd3n2TGY4H3BITzfMP4mzQ27BdolNbHcA8CbPJplO +8UqpE+Kxd/qUMHInt5Uqitb1DAB1QZLpMnyp1Q3roQzrAQDgFp5NMrlkBgAA4F6eTTKd4pVSJ8Rj +7/QpYeRObitVFK3rGQDqgiTTZfhSqxvWQxnWAwDALTybZHLvWXBuWz9uiwcAAISX5+pkTp0qScmV +2spLm6ByXcFy6emGY0me2+IBAACR4bkkU6qcVObn+yI6by+UOgm2fmItHkoYOTvfcHNbqaJoXc8A +UBeevVwerfhSqxvWQxnWAwDALUgyAQAAYDuSTIu8Xuok1uKhhJGz8w03t5Uqitb1DAB1QZLpMnyp +1Q3roQzrAQDgFiSZAAAAsJ0nny53QsVSPPn5Za/9/iLPTz/c8w13PHYvV8Uzgd27FzseT305Nd9w +c9t6BgBUR5JpQdVSPLm5SebTvHY8FR5s+naoafrB2sPNrnisTKe27VXTsHDGEwlOzTfc7NzulDAC +APtxudwj+FJDKNgfAABuQZIJAAAA25Fk2oSnwr0l0PrnTGB0o4QRAEQOSaZH8KWGULA/AADcgiQT +AAAAtiPJBCrw+plALvcDANyCEkY2odSJt0Tb+q9YH7JcxVI+KEMJIwCIHJJMj+BLDbWpWh8SAAAn +cbkcAAAAtiPJtAmlTryFEkaxiRJGABA5jlwuf/HFF7Vq1Sr5fGWX9MaOHavu3btLkk6cOKHJkyer +sLBQaWlpmjNnjpKSOHAH+olJu396EgAAwA6OnMm8+eabtXLlSmVnZ2v27NmaNm2aOWzx4sXq1q2b +srOz1bVrVy1ZssSJEAEAAFAPjpzJbNy4sfn6u+++0wUXXGC+z8vL0/z58yVJ/fv31+jRozVu3Dh1 +6dJFknTzzVvNM6Dlyt870V5+lrXi60B9amu3a/puWj9ua69tfb7+uk99+xrVxnNL/LQ7/zmtSzsA +xCLHni7Pzs5Wdna2Tp48qWeeecZsP3LkiNLS0iRJqampKiwslCRt3bpVkjR1qmQYFZMA3/+/9znS +Xlxcdqk6I0MqruGqdejtyUGnbxhJ5uuKqrfXPB2n1o/b2qdNO5eA5OWVvfb7iyqVAKrYzvqMjvZA +271c/T+/wdsBwO2Sk6uXwqsvxx78GTJkiFavXq1x48bpkUcecSoMz6CEkX3S0w3zTzr3sEagdkQH +ti8ARJbjT5f369dP//73v833aWlpKigokCQVFhYqNTXVqdAAAABQR44kmQcPHjRfv/POO2rbtq35 +PiMjQ+vXr5ckrVu3ThkZGRGPry4odQJ4FyWMAMB+jtyT+fzzz2v79u0yDEM/+MEPNHXqVHPYqFGj +NGnSJL366qtKTU3VnDlznAjRdShhBAAAvMSRJHPy5MkBhzVt2lRPP/10BKMBAACA3Ry/JxMAAADR +hyTTJlaf/uYSN+Aedn1++VwDwDmO1cmENXypAQDgTVlZycrJmWq+79Vrqlmj2S3tFR6PsQ1JJgAA +QBj5/UXy+/0VWopc2B5FxdijDaVOAO+ihBEA2I8k0yP4UgMAAF5CkgkAAADbkWQCAADAdiSZNqHU +CeBdlDACAPvxdHk9ZWVVfxrL7y8KS//8/GSzf6B2AAAANyDJtEF6umG+zs/31fp74jX1tzr9ukwH +AAAgUrhcHmYkfoD7UcIIAOxHkgkAAADbkWQCAADAdiSZAAAAsB1JZphR0gRwP0oYAYD9SDIBAABg +O5JMAAAA2I4kM8woaQK4HyWMAMB+JJkAAACwHUkmAAAAbEeSCQAAANuRZIYZJU0A96OEEQDYjyQT +AAAAtouvz8hFRUVq3Lix4uLIVavKykqu1ub3FzkQCQAAQORZzg7PnDmjBx54QM2bN1eTJk302Wef +SZKmT5+uxYsX2x6gl6WnG+afRHkTwK0oYQQA9rOcZE6bNk1/+9vfNG/ePDVq1Mhsv/zyy7V06VJb +gwMAAIA3WU4yly5dqkWLFun2229XgwYNzPaf/exn+te//mVrcAAAAPAmy0lmQUGB2rVrV609ISFB +JSUltgQFAAAAb7OcZLZp00Y7d+6s1v7OO++offv2tgQFAJFECSMAsJ/lJPOee+7R+PHjlZ+fL0n6 +6quvtGLFCk2YMEFjxoyxPUAAAAB4j+USRuPGjdPXX3+t6667TidPnlSPHj3UqFEjTZo0Sb/73e/C +ESMAAAA8xlKSefr0aW3YsEFjxozRxIkT9fHHH6u0tFQdO3ZUcnL1upCA3V54YZokaf9+KT19isPR +wOtqqmebnm6Yl71zc5NqvARutR0AYpGlJDM+Pl4DBw7Unj17lJqaqq5du4YrLqBGQ4eWJZb5+T5J +hrPBICqU17GVyvcrAIAdLN2T6fP5dNVVV2nfvn1hCgcAAADRwPKDPzNmzND48eP1yiuv6ODBgyos +LKz0BwAAAFh+8Oemm26SJA0YMKDG4YbBJUwA0YESRgBQd5aTzE2bNoUjDgAAAEQRy0lmr169whAG +AAAAoonlJLOiU6dOSZIaNmxoSzBAXQUqbUTJI9RHqKWKaiqF5PcXmcNycqaa7b16TZXfXxT2dgBw +Wp2SzGeffVaPPPKIdu/eLUlq3769Jk2apDvvvNPW4IBQBSptRMkjRErVUkjliajfXyS/31+hZ1kC +GO52AHCa5SRz8eLFGjNmjO69915de+21kqS3335bd999t0pLS/Xb3/7W9iABAADgLZaTzMcee0zz +58/XyJEjzbb+/fvrsssu0yOPPEKSCQAAAOt1Mvfu3au+fftWa7/++uu1d+9eW4ICADegVBEA1J3l +JLNFixbasWNHtfYdO3boggsusCUoAAAAeJvlJPPOO+/UqFGjtHz5cn3xxRf64osvtHz5co0aNUp3 +3XVXGEIEAACA11i+J3PatGk6fvy4Ro4cqdOnT0uSEhIS9Ic//EEPP/yw7QECgFNCLWEEAKjOcpIZ +Hx+v+fPna9asWdq1a5ckqUOHDmratKntwQEAAMCb6lyM/fzzz9c111xjZywAAACIEpbvyZw+fbqW +LVtWrf25557TzJkzbQkKAAAA3mY5yVywYIGuuOKKau0dOnTQggULbAkKANyAEkYAUHeWk8yCgoIa +SxX98Ic/1OHDh20JCgAAAN5mOcls1aqV8vLyqrXn5eWpVatWtgQFAAAAb7P84M/vfvc7jR49WidP +ntQvf/lLSdJbb72l++67TxMnTrQ9QABwCiWMAKDuLCeZ//3f/62jR4/q7rvvVklJiSSpYcOGuvfe +e0kyAUSFrKxk83V+ftlrv7/IqXAAwJMsJ5lxcXHKysrSlClT9Mknn0iSrrjiCiUnJ9cyJgB4R3q6 +Yb7Oz/dx9hIALKpzncwmTZqoW7dukqSTJ0/KMAz5fD7bAgMAAIB3WX7w54knntArr7wiSTp79qxu +vfVWNW7cWBdffLG2bdtme4AA4Dac0QSA2llOMh977DFdeOGFkqRVq1bpnXfe0d///nf17t1bY8eO +tT1AAAAAeI/ly+WHDx9W8+bNJUlr165VZmamfvOb36hz587q2LGj7QECAADAeyyfyfzRj36kFStW +6KOPPtLatWt1ww03SJLOnDmj8847z/YAAcBtcnOTnA4BAFzPcpI5adIk3X///erUqZPat2+vfv36 +SZLeeOMNdenSxfYAAQAA4D2WL5ffc8896t+/v44eParOnTsrPr5sEt26ddN1111ne4AAAOuyspKV +kzPVfN+r11T5/UWeaQfgfXUqYdS2bVu1bdu2Ult5OSMAgPP8/iL5/f4KLUWeagfgfZYvlwNArKOE +EQDUjiQTAAAAtqvzL/7U1datW/X444/r7NmziouL06RJk9SpUydJ0okTJzR58mQVFhYqLS1Nc+bM +UVIST3ECAAB4jeUzmePGjdNHH31U5xmmpKRo3rx5Wrlypf785z9r2rRp5rDFixerW7duys7OVteu +XbVkyZI6zwcAwoUSRgBQO8tnMrdt26annnpKXbp00ahRo3T77beradOmIY9/ySWXmK+vuuoqHT16 +1Hyfl5en+fPnS5L69++v0aNHa9y4cZJklke6+eat1X4jvfw97bTTTns428uvrFR8XXW8mvoDQCyy +nGTm5uZq9+7dWrp0qaZNm6b77rtPv/nNbzRy5Ej17NnT0rTWrFmj7t27m++PHDmitLQ0SVJqaqoK +CwvNYVu3bpUkTZ0qGYZRYSq+/3/vo92D7S+8UHYme/9+KT19Sq3t4Z6v29ZPuNdntLaHaz0XF5c9 +8GMYSebrMslB+wOA2yUnJ9s+zTrdk9muXTs98sgjmjVrltatW6elS5fquuuuU9u2bTVy5EiNGDHC +TBYD2b17t5YvX65FixbVKXBEh6FDp0iS8vN9koxa28M9X6+zuj6jtR0A4Lx6PV1eUlKib775Rt98 +841KS0t10UUX6dlnn1WbNm30wgsvBBzv8OHDmjx5smbPnl0pGU1LS1NBQYEkqbCwUKmpqfUJDwDC +ghJGAFC7OiWZmzdv1t13362WLVtq4sSJ+vnPf649e/borbfe0q5du/TII4/ovvvuq3Hc4uJiTZgw +QePHj1eHDh0qDcvIyND69eslSevWrVNGRkZdwgMAAIDDLCeZV155pbp3764DBw5o2bJl+uKLLzRr +1iz9+Mc/NvsMHjzYPCNZ1UsvvaT9+/drwYIFyszMVGZmpkpLSyVJo0aN0nvvvafBgwdr8+bNGjly +ZB0XCwAAAE6yfE/moEGDNGLECF100UUB+6SlpVW5Cf6cYcOGadiwYTUOa9q0qZ5++mmrIQFAROXm +JnHJHABqYTnJfPjhh8MRBwAAAKKI5cvlPp9PX331VbX2wsLCanXiAAAAEJts+1lJwzAUF+f8T6FX +r5vnzv60u5OX95+yMj7ndO9erPz8wHXPorm/XfthuPsjsKysZOXkTDXf9+o1VX5/kSfaa5KebnCL +BWJOyEnm8ePHzdfffvutGjVqZL4vLS3Vq6++qgsuuMDe6OrAat08p/rT7k5e3X/8/iJJod8rGO39 +7doPA/UPFKNX9nMv8PuL5Pf7K7QUeaY9KytZ6enntn/Vf4iAWBFykpmSkmK+bteuXY19/vKXv9Q/ +IgAAAHheyEnmpk2bJEm9e/fWqlWr1KxZM3NYgwYN1KZNG7Vq1cr+CAGEzOrluFjrDwCInJCTzF69 +ekmq+rvhABB7KGEEALULKcksLCxU8+bN5fP5VFhYGLQvPwUJAACAkB4HT0tL0+HDh83Xwf4AOCc3 +N4n+AABXCOlM5qZNm8x7MMvvzXSa20qRULrEOwI96RmsvWKJkkAlgyLZ34pY618XoX5+s7LKSiRV +3F6vvOIP0Buxju8FxLqQkszy+zGrvnaSV0rNwF0Clb7p3l1B29PTp1RoL3a8v1dKCUW6f11Z+fym +pxuV/hHIzeXzjprxvYBYF/I9maHinkwAAACElGRaudeSp88B57itZJDb+gMAIifkezKBaBIoOfF6 +eyCx1h8A4DzL92QCAAAAtQmphFFNDMPQiRMndPz48Up/AJzjtpJBbusPAIickH/xp9zXX3+tsWPH +avXq1Sourn4Ji3sy4QWBnlYO1L5pU7ISE8v27YrD3dY/kFjrDwBwnuUk85577tHHH3+sF154Qbff +frsWLlyow4cP66mnntLMmTPDEWPEVa3L1717sfLzkwO22zV9+gfvb0d7XfXuXUR/j/R32/6M2BTo ++JOVlVypzmqvXlPl9xdFbTtim+Uk89VXX9Urr7yiHj16qEGDBkpPT9dll12myy67TH/96181fPjw +cMQZMYHq8tlVr89tdQW90t+udkQ3t+3PiE3Bkiu/v0h+f8UC/kVR3Y7YZvmezO+//15t2rSRJJ13 +3nk6duyYJKlz58569913bQ0OgDVue8rbbf0BAJFjOcns0KGD9uzZI0m6+uqr9cwzz2j//v16+umn +lZKSYnuATrGrdIzV6dM/eH9KAyEUbBcAcJ7ly+UTJkzQgQMHJEnTpk3TjTfeqKVLlyo+Pl6LFy+2 +PUAAAAB4j+UzmXfeeaeGDRsmSfrFL36h/fv3Kzc3V59//rnuvPNO2wMEEDq3lQxyW38AQORYTjJr +qot5xRVXqHHjxlFVJzPQl5ddX2pu+/L1Sv9wt2/alKzc3KSQ43Vb/5ISH/3lvv0ZAGKR5cvltd13 +GYt1MquWqqit3ep06B85iYmGpfvt6O+d/tGwfwJeY0cppJpQHskbLCeZVX/HvLS0VP/+9781d+5c +TZ061a64PCNQSZPu3VVju9Xp0D+y3PbACP3t6R8t+yfgNXaUQsrKSlZ6+rkTWPn5Pj6bHmE5yazp +d8x/+ctf6tJLL9X//u//mvdrAgAAIHbV+bfLq+rQoUNU1cmkhJE7+ztVqgje4rb9GQBikeUzmYWF +hdXaCgoKNH36dLVq1cqWoLwoWusuuq0/UB/snwAQOZaTzLS0tIDtf/vb3+odEAAAALzP8uXyTZs2 +VfrLycnRBx98oAMHDui6664LR4yOoISRO/uHux3RwW37MwDEIstJZq9evdSrVy9lZGTo5z//ua69 +9lr95Cc/UUJCQjji8wy7khn6lwlU/zDc7YhuJJMAEDmWLpcXFxdr5syZytGopdYAABjoSURBVM7O +1r59+yRJF110kQYPHqyHHnpI559/viTpzJkzio+3fCUeMPXuXXMNtHC3AwAAe4ScCX777bfq2bOn +vvnmG/3hD3/Q1VdfLUnasWOHFixYoFdeeUX5+fnavn27tm3bVqXOFQAAAGJJyEnmjBkzlJCQoH/9 +619KTk4222+88UaNHj1avXv31q9//Wu99957WrRoUViCjSRKGDnbH6gP9mcAcF7ISebf//53PfPM +M5USzHJNmzbVrFmz1K9fP82YMUN33HGHrUF6ASWMItMfqA/2TwCInJAf/Dl48KA6dOgQcHiHDh0U +FxenBx980JbAAAAA4F0hJ5kpKSk6cOBAwOFffvmlWrRoYUtQbkAJI2f7A/XB/gwAzgs5yezXr5/m +zJkjwzCqDSstLdXs2bPVr18/W4PzEkoYRaY/UB/snwAQOSHfkzlt2jR17dpV119/ve677z5dddVV +kqSPPvpI//M//6OPPvpIW7duDVugAAAA8I6Qz2S2adNGeXl5iouL00033aRWrVqpVatWuvnmmxUf +H6+8vDy1bt06nLECAADAIyxVTL/sssu0YcMGHT16VJ9++qnZ1qxZs7AE5yRKGDnbH6gP9mcAcF6d +fpanefPmat68ud2xeBoljCLTH6gP9k8AiBzLv10OAAAA1IYkMwBKGDnbH6gP9mcAcB5Jpk0oYRSZ +/kB9sH8CQOSQZAIAAMB2dXrwx2n5+b5K77t3L1Z+frIt7QBQFxxPAKAyzyWZU6dKRUVFys1NqnQQ +9/uLJKne7eUoYeRsf6A+Ir0/13Y8AYBYxOVym1DCKDL9gfpg/wSAyPFskmk1qQv3mUkA4HgCAOd4 +NskMN0oYOdsfqA/2ZwBwHkmmTShhFJn+QH2wfwJA5Hg2ybSa1IX7zCQAcDwBgHM893Q5AACIPS+8 +ME2StH+/lJ4+xeFoEAqSzAAoYeRsf6A+2J+B6DN0aFliWVaT1nA2GITEs5fL3YYSRpHpD9QH+ycA +RI5nk0xKGAFwG44nAHCOZ5PMcKOEkbP9gfpgfwYA55Fk2oQSRpHpD9QH+ycARI5nk0xKGAFwG44n +AHCOZ5NMAAAAuBdJZgCUMHK2P1Af7M8A4DySTJtQwigy/YH6YP8EgMjxbJJJCSMAbsPxBADO8WyS +GW6UMHK2P1Af7M8A4DxHksyFCxfq5ptv1jXXXFNt2IkTJzRmzBgNGTJEY8eOVXGxN84MUMIoMv2B ++mD/BIDIcSTJ7N69u5599lklJiZWG7Z48WJ169ZN2dnZ6tq1q5YsWVLjNChhBMBtOJ4AwDnxTsz0 +yiuvDDgsLy9P8+fPlyT1799fo0eP1rhx49SlSxezz5YtW+Tz+ZSUVP2A7pX2khKf8vKSJUl9+xqO +x+O2OIH6cNvnCED9+Hy+au/5rLmfI0lmMEeOHFFaWpokKTU1VYWFhZKkrVu3mn2KiopkGEk1Xkq3 +qz0jQ6rpSn2gdqvT79373OuKg63GE+7+iYlJysgorhZnuOMB6sOpzwv7MxAOyTIMo8J7nwzD4LNm +s+TkZNunyYM/NqGEUWT6A/XB/gkAkeO6JDMtLU0FBQWSpMLCQqWmptbYjxJGANyG4wkAnOO6JDMj +I0Pr16+XJK1bt04ZGRmOxOG2B4Xc9pQ3T+nCzdifAcB5jiSZ8+bNU//+/fX999+rf//+mjdvnjls +1KhReu+99zR48GBt3rxZI0eOdCJEy6K1hJFVbosHqIj9EwAix5EHf8aMGaMxY8bUOKxp06Z6+umn +a51Gbm5SjZem7GoHAKs4ngDAOa67XA4AAADvI8kMwG0PCtn1VGxJiU+5uUk1XgYM1O5UPEBdURUB +AJznujqZXuWVEka9exfZMp1A7IoHCAeSSQCIHM+eyaSEEQC34XgCAOd4NskMt1grYWSV2+IBKvJ6 +lQYAiAYkmTbxSgmjcHNbPEBFXv98AYCXeDbJtJrUue3MJIDow/EEAM7xbJIJAAAA9yLJDCDYDfxO +lNypywMF4YzTbfEAFbmtqgMAxCJKGFkU7qfX7ervtnqefCnDDUgmAW/Kz/fV2J6VlaycnKnm+169 +psrvL3Jde6zyGYZhOB2EVUVFsbvBAAAA7JacnGz7NLlcHoDbLusSDxC6WKvqAABuRJJpE0oYlXFb +PEBFXv98AYCXeDbJpIQRALfheAIA53g2yQQAAIB7kWQG4LanSokHCB0ljADAeSSZNrGzdI+VepJu ++7JzWzxARSSTABA5lDACAACIcZQwiiC33cBPPEDoYq2qAwC4EUmmTZx6et1tX3ZuiweoiGQSACLH +s0kmJYwAuA3HEwA4x7NJJgAAANyLJDMAtz1VSjxA6ChhBADOi3c6gGhhZwkjO+YbbhUvC1aNoXwY +X8RwG5JJAIgcShgBAADEOEoYRZDbbuB3WzyAm1HCCACcR5JpE0oYAe5HMgkAkePZJJMSRgDchuMJ +AJzj2SQTAAAA7kWSGYDbnip1WzyAm1HCCACcR5Jpk1grYQR4EckkAEQOJYwAAABiHCWMIshtN/C7 +LR7AzShhBADOI8m0CSWMAPcjmQSAyPFskkkJIwBuw/EEAM7xbJIJAAAA9yLJDMBtT5W6LR7AzShh +BADOI8m0CSWMAPcjmQSAyKGEkU0q3otV8YspULvbpg8AAGJXOEoYkWQGkJub5KqkzW3xAG5m9fMS +7v4A4HbUyYxhfKEB9UcJIwCIHM8mmZQwAuA2HE8A4BzPJpkAAABwL5LMALg8DXgXJYwAwHkkmQBi +BskkAEQOT5cDAADEOJ4ujyBu4Ae8K9xPkXN8AIDakWQCiBkkkwAQOZ5NMilhBMBtOJ4AwDmeTTIB +AADgXiSZAfBUKeBdlDACAOeRZAKIGSSTABA5lDACAACIcZQwiiBu4Ae8ixJGAOA8kkwAMYNkEgAi +x7NJJiWMALgNxxMAOMezSSYAAADciyQzAJ4qBbyLEkYA4DySTAAxg2QSACKHEkYAAAAxjhJGEcQN +/IB3UcIIAJxHkgkgZpBMAkDkeDbJpIQRALfheAIA53g2yQQAAIB7kWQGwFOlgHdRwggAnEeSCSBm +kEwCQOS4roTRiRMnNHnyZBUWFiotLU1z5sxRUlLl+5woYQQAAGCfmChhtHjxYnXr1k3Z2dnq2rWr +lixZ4kgc3MAPeBcljADAefFOB1BVXl6e5s+fL0nq37+/Ro8erXHjxqlLly5mn5ycnEoH+YqXtOxq +LynxmcO4ZAZ4S6DP76ZNyUpMNKq129U/0PEEAGKR65LMI0eOKC0tTZKUmpqqwsJCSdLWrVvNPuWX +ywMdxO1oT0w0+JIAPCrQ5zfc7RLJJQCUc909mddee61ycnLk8/kkSb/85S/11ltvORxV5HTp0qVS +Qh3tWN7oxvJGN5Y3urG8qC/X3ZOZlpamgoICSVJhYaFSU1MdjggAAABWuS7JzMjI0Pr16yVJ69at +U0ZGhsMRAQAAwCrXXS7/9ttvNWnSJB09elSpqamaM2eOmjRp4nRYAAAAsMB1SSYAAAC8z3WXywEA +AOB9rithFEu2bt2qxx9/XGfPnlVcXJwmTZqkTp06SQrtl4+87tFHH9WqVau0efNmsy1al3vhwoV6 +8803ZRiGbrvtNg0aNEhSdC7v22+/bda69fl8uueee9SzZ09J0bO8Cxcu1Nq1a1VQUFBp/5WCL6NX +lz/Q8kbrMSzY9i0XTcev2pY32o5fwZY3Fo5fEWXAMZ9++qlx9OhRwzAMY9u2bcatt95qDnv88ceN +559/3jAMw3j++eeNuXPnOhJjuHzwwQfG5MmTjV/84heV2qNxuVevXm1MmTLFOHv2rGEYhvH111+b +w6Jxefv27Wv85z//MQzDMPbt22fccMMN5rBoWd5//etfxpEjR6rtv4YRfBm9uvyBljdaj2HBtq9h +RN/xK9jyRuPxK9jyxsLxK5K4XO6gSy65RM2aNZMkXXXVVTp69Kg5LC8vT/369ZNU9stH//znPx2J +MRxKSko0d+5c+f3+asOicblffvll/fa3v1VcXNnH7Qc/+IE5LBqX96KLLjJ/MOHEiRP60Y9+ZA6L +luW98sorzR+NqCrYMnp1+QMtb7Qew4Jt32g8fgVb3mg8fgVb3lg4fkUSl8tdYs2aNerevbv5PtAv +H0WDBQsWaODAgeaXU0XRuNyff/65XnvtNeXk5CglJUX333+/WrVqJSk6l3fmzJkaNWqUfD6fDMPQ +okWLzGHRuLxVBVvGaF7+WDmGcfzi+CVFz/KGG2cyXWD37t1avny5JkyY4HQoYbdz507t2rVLt9xy +i9OhRMzZs2fVunVrZWdn69Zbb9X06dOdDimsHn30UY0bN06vvvqqxo8fr8cee8zpkBBmsXIM4/jF +8QvWkGQ67PDhw5o8ebJmz55d6fR9tP7y0fbt2/XZZ59pwIABGjBggL7//nsNGDBApaWlkqJzuVu2 +bKm+fftKkvr06aM9e/aYw6JxeT/88EP16dNHUtny7tixwxwWjctbVbBljMblj6VjGMcvjl/Rtrzh +RpLpoOLiYk2YMEHjx49Xhw4dKg2L1l8+yszM1Pr167V27VqtXbtWjRo10tq1a837faJxuTMyMvT+ +++9LKnsa9+KLL640LNqW96KLLjKXd/PmzbrwwgvNYdG4vFUFW8ZoW/5YO4Zx/OL4FW3LG24UY3fQ +8uXL9cwzz5j3t0jSCy+8oLi4uJj55aMePXro3XffNd9H43IXFRXpoYce0oEDB5SQkKApU6bo8ssv +lxSdy/vxxx/rL3/5i0pKSpSYmKgHHnhAHTt2lBQ9yztv3jytW7dOBQUFSktLU//+/TVmzBhJwZfR +q8sfaHmj9RgWbPtWFC3Hr2DLG43Hr2DLGwvHr0giyQQAAIDtuFwOAAAA25FkAgAAwHYkmQAAALAd +SSYAAABsR5IJAAAA25FkAjEsJydHPp9Px48fd0UcofxMm5W+kYopnNOozYwZMzR06FDL44U7tkht +J6vsjutnP/uZ/vGPf9gyLSDakGQCDir/wiv/O//889WvXz/t3LnT6dAiKiMjQ4cOHVLz5s0lBU9+ +q/aNVExudOzYMWVlZenBBx8026ruU+edd5569uypDz/8sNK44V4+p9bfxIkT1bFjRyUmJio1NVV3 +3XWXjh07Frb53X///XrooYdENUCgOpJMwAU+/vhjHTp0SJs2bVJpaakGDhzodEgRlZiYqJYtW8rn +89naN1IxOWXJkiXq2LGj2rdvX21Y+T61ZcsWJSUlVdunwr18Tq2/HTt2aPr06dqzZ4/Wrl2rLVu2 +6I477gjb/AYMGKDDhw/r9ddfD9s8AK8iyQRcoEWLFmrZsqV++tOf6k9/+pN2796t77//vlKfJ598 +Uu3atVNiYqIuuugiPfzwwzp79qw5/Pnnn1fnzp3VsGFDpaSkaOjQoZXOBJ45c0Z+v19paWlKSkrS +Lbfcoi+//DJoXOVnxd544w1lZGSoUaNGat26tebNm1ep35kzZ/Tggw+qVatWSkxMVLt27bRkyZJK +fRYuXKiLL75Y8fHxuvDCC/XEE09Um0/5JczevXtLklJSUswzcoH6hjLv8nE2btyon/3sZ2rYsKG6 +du2q3bt317rs5fOpyzTKbd++Pej6C3U9V5Wdna1f/epXNQ4r36euvPJKjRkzRvv27au0T9mxfFa2 +acWzqxX/KqptHw/Fhg0b9Otf/1qtW7dWenq6Zs6cqQ0bNujUqVOV+tm1TRITE9WvXz+tXLnSUpxA +TDAAOGbTpk2GJKOgoMAwDMM4fvy4MWzYMKNDhw6V+k2ZMsVo166dsW7dOmP//v3G66+/brRp08a4 +//77zT7Lli0z3nzzTeOLL74wcnJyjCuvvNIYOnSoOXzcuHFGixYtjDVr1hiff/65sXDhQiM1NdWQ +ZHz99ddB47v00kvN8RYtWmQ0bNjQWLp0qdlv9OjRRlpaWsA+e/fuNXw+nzF79mxj3759xpYtW4w1 +a9YEXA+rVq0yJBm7d+82Dh06ZBw6dChg39rmXXGcjIwMIz8/3/jkk0+Mn//850avXr1C3jb1mUZt +6y/UfhV9++23hs/nM958882gcX/33XfGiBEjjE6dOtm6fFa3afl2PHTokHHgwAGjR48eRo8ePcz+ +oezjVacZiiVLlhjJycnG2bNnK03Dzm3yxBNPGD/+8Y9DjgmIFSSZgIPKv8iSkpKMpKQkQ5Jx+eWX +G59++qnZp7i42DjvvPOMvLy8SuOuWLHCaNasWcBpv/zyy0ZSUpJRWlpqfPPNN0ZiYqKxbNmySn38 +fn9ISWbV8SZOnGi0b9/eMIyyxDghIaHGPu3atTMMwzC2bNliSDJ27NgRdD5VE56a4qrYN5R5Vxzn +rbfeMttWrlxpxMfHG6dPn7YUU12mEWz9WelX0QcffGBIMvbs2VPjPMv3KZ/PZ7Ro0cJ4++23bV0+ +q9u0osmTJxsXX3yxcfjwYcMwQt/HN2/ebLRr1y7g/lrV8ePHjbZt2xp//vOfq8Vl5zZZtWqV4fP5 +jJKSkpDiAmIFl8sBF9i0aZO2bdump59+Wnv37tWOHTvMYR9//LFOnjypvn37Kjk52fwbMWKEjh07 +pqKiIklSbm6u+vTpoxYtWqhJkya6/fbbVVxcrKKiIu3atUslJSW69tprK823/LJ0baqOd+2112rX +rl06deqUdu3apdOnT9fYZ/fu3Tp16pQ6d+6srl27qmfPnho2bJj+/ve/W74MWpNQ5l1Rx44dzdct +WrTQmTNnVFxcbGmedZlGsPVXl36SzO2enJxc4zw3bdqk7du3a9euXVq6dKn++Mc/avHixUHjlEJf +vrpu0xdffFFPPvmkVq9erRYtWkgKfR/v1q2bdu3apR/84Ae1zufUqVP69a9/rVatWmnGjBnVhtu5 +TZo2bSrDMMw4AZSJdzoAAFLbtm2Vmpqqdu3aaffu3ZowYYIGDBighIQElZaWSpLWr1+vli1bVhu3 +cePGOn78uG688UYNHDhQM2bMUGpqqvLz83XnnXdW+uKv60MY9X14Iz4+Xrm5udqwYYPWr1+vu+++ +WytWrNDLL79cr+laFRdX/f9qw+JTwXWZRqjrz8p6Lk8uT5w4UeN+Ub5PSdLll1+ukydPauTIkfrt +b3+rBg0aBJxuqMtXl2364YcfasSIEVq6dKl+8pOfmO2h7ONWnDlzRkOGDNHx48f11ltvqWHDhtX6 +2LlNvv32W/l8voAJPxCrOJMJuMx9992nAwcOmLX3OnbsqEaNGumLL77QpZdeWu0vLi5OO3fu1IkT +JzRjxgylp6frsssu05EjR8xptm/fXomJiXr77bcrzSsnJyekmKqO984776h9+/Zq2LChOnTooISE +hGp93n77bbOPJCUkJOjmm2/WvHnztHDhQq1evVonT56scX7lSVB58hFIqPN2WrD1V5d+knTppZfK +5/Pp888/DymGuLg4nThxQmfOnLEYfWBWtumRI0f0X//1X7r33ns1aNCgSsNC2cdDVVpaquHDh2vP +nj3asGGDmjZtWmM/O7fJ559/rrZt2yohISHkOIFYwJlMwGUuvvhiDRgwQE8++aRuv/12JScna9Kk +SRo7dqzOnj2rnj176vTp09q2bZt2796thx9+WG3atFGDBg301FNPafTo0dq+fbuefPJJc5pNmzbV +73//e/n9fqWkpOiqq67S66+/rueeey6kmKZPn66UlBRdffXVev311zV37lzzKduq0+7UqZM2btyo +uXPn6q9//ask6f3339f777+vPn36KD4+XmvXrtWFF16oRo0a1Ti/1q1bS5LWrFmjm266ST6fzzwr +V1Eo83aDYOuvLv0kqUmTJurcubO5Xqs6cuSIzpw5o9LSUn366aeaOnWq+vbta1vibXWblj/xfc89 +9+irr74y21u2bBnSPl4+z+HDh+u9994LeMn897//vXJycrRu3TqdPn3anNcFF1xQ6aykndvk/fff +r3ZZHYB4uhxwUqCHI958801DkrFlyxazbeHChcbVV19tJCYmGklJSUa3bt2MRYsWmcOXLFli/PCH +PzQaNWpkXHfddcZzzz1X6eGZkpISY8KECUbz5s2N8847z7jxxhuN5cuXh/Tgz4YNG4xrrrnGaNiw +odGqVStj7ty5lfqdPn3auP/++40LL7zQSEhIMC6//PJKse3cudPo3bu30aRJEyMhIcG45pprjM2b +NwddDzNnzjR++MMfGnFxcUbFQ1XVvrXNO9D0gz1cVNM49ZlGbesv1H5VzZkzx+jWrVuN0yr/8/l8 +xgUXXGCMGjXKOHr0qG3LZ3WbVoyp4l9Fte3joTxdHmg+5ctg9zY5deqUkZKSYqxfvz5gTECs8hkG +P1MAoGY5OTnq3bu3CgoKajyTCHvUdT0fPXpUbdu21XvvvacrrrgijBHGnlC3yapVq/TAAw/ok08+ +cXXhfsAJ3JMJAB7VvHlz+f1+/eUvf3E6lJg1a9YszZgxgwQTqAH3ZAKAh5XfrwhnbNu2zekQANfi +cjkAAABsx+VyAAAA2I4kEwAAALYjyQQAAIDtSDIBAABgO5JMAAAA2O7/AFLuW7gtRtZ5AAAAAElF +TkSuQmCC +" /> +<br /><br /><img border="0" src="data:image/png;base64,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 +AElFTkSuQmCC +" /> +</div><hr><div class="info-header"><span class="info-header-title">Occurence of N</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type">Sequences with N:</td> <td class="info-table-value">2 (16.67 %)</td></tr><tr><td class="info-table-type">Max percentage of Ns per sequence:</td> <td class="info-table-value">10 %</td></tr></tbody></table><br /><img border="0" src="data:image/png;base64,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 +gAFq1qxZkWVOG2uh/fv3e/68fPlyzyVgyXlj7tmzpxYsWKCUlBSlpKQoODhYKSkpnjNOThtvRkaG +zP+bhvqbb75Rw4YNPcucNtZCcXFxWrVqlaTfZ+U4/Re6U8csSTt27NCJEyfUokULT5sTx9ugQQPP +8f3uu+9Uv359zzInjve3336T9PutOu+8847i4+M9y5w43orGRP0+btKkSZo/f77S09NVq1Yt3Xzz +zXryySclOe/NWrNmzdLUqVM996xJ0vvvvy8/Pz/HjbXQmDFjtG7dOhljFB4eXuQ+RaeOuVD79u31 +9ddfez47bbwLFizQjBkzJEnBwcH65z//qSZNmkhy3lgLZWZmasSIEdq3b5/cbreeffZZx49Zkt56 +6y0ZY/TEE0942pw43k2bNumFF15QTk6OAgMDNXz4cMXGxkpy5ng//vhjzZ49W/7+/urQoYP69Onj +mRLQieOtaARUAAAA2AqX+AEAAGArBFQAAADYCgEVAAAAtkJABQAAgK0QUAEAAGArBFQAOMPUqVPV +qFEj+fv7e6aNQcVYunSpXC6XMjIySl1n1KhR6tWrVwX2qnK1bt1aH3/8cWV3A6hQBFTAZgp/QRf+ +1KhRQz179vS8lcRXlCVo2NG+ffv0+OOP6+mnn9bevXv1yy+/lLhe4fguv/xynT5b35njLvzsK+/i +PvP7V716dXXt2lWbN2+u7K5Jkn799VeNGzdO//znP4u0P/LII7r66qsVFhZW7u9dWbZ95ZVX1KhR +IwUFBenSSy/V3Llzy71OcnKyGjduLLfbrSuuuMIzqb0k5ebm6tJLL1VycnKx/Q4bNkwjRowQs0Li +z4SACtjUpk2b9Msvv2j+/PnasGGD7rvvvvPeZ15enhd65mzbt29XQUGBunfvrnr16umCCy446/pp +aWn69NNPK6h33nW270Ph9y81NVUFBQW64447KrBnpXv77bcVGxurmJiYIu35+fnq3r27RowYUe59 +nmvbSZMmKTExUS+//LJ++uknPfLII7r77ru1bNmyMq9z6NAh9ezZU3fffbe2bNmiRo0aqXv37p7t +x40bp4suukh33nlnsfrx8fE6ePCgFi1aVO6xAT7LALCV1NRUI8mkp6d72j788EPj7+9vcnJyPG0T +J040TZo0MW6329SvX9+MGDHC5OXlFdvP/PnzTdu2bY3b7TYpKSkmPz/fvPjii6Zx48bG7XabunXr +msTExCJ9KOu+v/zyS3PFFVeYwMBA06ZNG5OWluZZR1Kxn0IzZ840l112mQkMDDTh4eHmnnvuMUeP +HvUsP3XqlBkwYICpWbOmCQkJMbfddptJSkoykoqsd65+nik3N9cMHz7cNGjQwLjdbtOkSRMzffr0 +Iuucrd8lHae+ffuaVq1amYKCgiLthf0883hOnjzZREVFGX9/f1OvXj0zfvz4UvtbuO2iRYvM1Vdf +bYKCgsyFF15oXn/99WLr/tHvQ2k1T//+LViwwEgy2dnZ5ap5ruOcm5trBg0a5DnO8fHxZtasWcWO +8+muuOIKM3bs2HP+nZW2/dmUtG1BQYFp0KCBGT16dJF1e/ToYbp161bmdb755hsjyezdu9cYY8z8 ++fONJJOVlWW2bdtmatWqZfbs2VNq33r06GEefPDBco8J8FUEVMBmSgoIn376qXG5XObkyZPGGGOe +ffZZ07RpUzN//nyzd+9es2jRIhMdHW2GDRtWbD+tWrUyS5cuNbt27TLp6elmyJAhJiIiwsyePdvs +2bPHfP/992bmzJme7cqz77i4OLNy5UqzZcsW065dO3Pdddd51klOTjaSzNatW80vv/xifvnlF8+y +9957zyxevNjs2bPHLF261LRo0cL06tXLs/yxxx4zdevWNZ9//rnZvXu3efvtt02dOnWKhIey9PNM +TzzxhKlVq5aZN2+e2b17t5k2bZoJCgoyM2bMKFO/SzpO27ZtMxEREWbu3LlF2ksKqDt37jQul8uM +GTPG7Nq1y3z//fdm3rx5pfa3cNuLL774rH0+n+9DaTULl2VkZJh7773XNGvWrMh6Zal5ruPcr18/ +U7t2bc/YpkyZYmrWrFlqwDx27JhxuVxm8eLF5/w781ZA3blzp5FkVq9eXWTdmTNnmurVq5d5ncOH +D5vg4GAzZcoUk5+fb/r27WuaNm1qjDGmc+fO5tVXXz1r3yZMmGAuuuiico8J8FUEVMBmzgwI6enp +pmPHjqZdu3bGGGOysrJMlSpVzIoVK4psl5SUZGrUqFFsP6cHoGPHjpmgoCDzzjvvlFi7vPtesmSJ +p+2DDz4wAQEBJjc3t8g6ZQkKc+fONVWrVjUFBQXmt99+M26328yePbvIOkOHDvXsr6z9PF1GRoZx +u93mvffeK9I+ZMgQT1AoT79PP06JiYmes6hn2/777783ksz69evPuu8za5TU55iYGGPM+X0fzlaz +atWqpmrVqkaSadKkidm2bZtnnT/y929M8eMcGBhYbGyDBw8u9e/vhx9+MJLMzz//fM7+eyugrlix +wkgy+/fvL7LuwoULjSRz4sSJMq1jjDGfffaZadWqlalTp47p2LGj2bhxo5k1a5Zp06aNWbVqlYmL +izNRUVGmW7duZt++fUX2lZycbFwuV5GrKICTcQ8qYFPR0dEKDQ1V7dq1lZWVpXfffVfS7/cGZmdn +q0uXLgoNDfX8PPjgg/r111+VmZlZZD+tW7f2/HnLli06deqUrr/++hJrlnffsbGxnj/Xrl1beXl5 +ysrKOufYvv32W3Xu3Fm1a9dWWFiYevTooaysLGVmZmrLli3Kzc3VNddcU2Sb9u3b/+F+Sr/fK5qb +m6uOHTsWae/YsaO2bt2qU6dOnbPfpenfv792796tTz755KzrtWrVSm3btlWHDh1077336qOPPlJ+ +fv45919Sn9PS0nTq1Knz+j6cTWpqqtasWaM333xTO3fu1Pr16z3LylrzbMc5LS1NOTk5xcbWqVOn +UvtUuN/Q0NAyjeF0p/fzj2xfltkczrVOt27dtHbtWh04cEBLly5VvXr1NGTIEE2aNEm333674uPj +tWvXLlWrVk0PPPBAkW2rVasmY0yJ323AiQIquwMASpaamqoaNWooPDxckZGRnvaCggJJ0oIFC0p8 +gCckJKTI58DAwDLXLO++/fyK/x/XnONJ44yMDN1000264447NGrUKNWsWVMrV67UfffdVySsnfnL +/vTP5e2n1apXr66EhASNHDlS48ePL3W9gIAAffvtt/ryyy+1YMECPfroo0pKSirxifDTnS34WPV9 +aNSokWrWrKmmTZtq69atSkhIUHx8vNxud5lq/tHjfDaFwfL48ePnfHjtTOvWrSvX+oXq1q0rSdq/ +f3+Rmvv371f16tVVpUqVMq1Tkqeeekr33HOPAgICtG/fPvXq1Ut+fn7q2bOnbrvtNuXm5srtdkuS +jh07JpfL9YfCNeCLCKiATRUGhDPFxsYqODhYe/bs0bXXXluufTZr1kxBQUFasmSJ7r//fq/u+0z+ +/v6S/n+AKrR582YdP35co0aNUlRUlCQVeQo+JiZGbrdb3377bZGnnL/++uvz6mezZs3kdru1bNky +3XvvvZ72ZcuWKSYmRkFBQeUf5Gn69++vCRMmnPMsqtvt1i233KJbbrlFHTt21N13363s7OxSQ0xh +H0+f93P58uWePnvzmJVm4MCBmjRpkj7++GP16NGjTDXLcpwDAwOLjW3p0tELo5IAAAQLSURBVKWl +9uPiiy+Wy+XS7t27dckll5RrDBdffHG51i/UsGFDNWjQQAsXLtQVV1zhaV+4cKFn7GVZ50zLli1T +amqqfvzxR/3444+Sfp9qSpJycnJUUFBQ5N/O7t271ahRI09gBZyOgAr4mNDQUA0dOlR9+/ZVfn6+ +OnTooNzcXK1Zs0Zbt27Vv/71r1K3DQsLU//+/TVo0CBVqVJFcXFxOnjwoDZt2qT77rvvvPZ9poYN +G0qS5s2bp27dusnlcqlmzZqKjo6Wv7+/Xn/9dT3xxBNat26dXnvtNc921atX10MPPaSBAweqWrVq +atGihZYsWaJ33nlHkjxnkcrbz2rVqumRRx7R4MGDFRERocsuu0wLFy7UxIkT9dZbb5V5XKWpVq2a +EhISNHr06FLXWbVqlVatWqXOnTsrICBAKSkpql+/voKDg8+675EjRyoiIkItW7bUokWLNHHiRE2a +NEnS+X0fyurCCy9UfHy8XnvtNfXo0aNMNc91nM88HpdeeqkWLVqkmTNnltqPsLAwtWrVyvN3eLrC +M6Tbtm2TJG3cuNGz/rmcbVuXy6Wnn35aw4cP1yWXXKK2bdsqJSVFH330kWfap7Ksc7pTp07p0Ucf +1RtvvKGQkBC1bNlSkZGRGjdunAYNGqQ333xT1157bZH/NK1atarY7RCAo1X2TbAAiirpKf6STJky +xbRs2dIEBgaaqlWrmiuvvNJMmzbtnPvJz883o0ePNtHR0cbf39/Ur1/fjBo16rz3XdIDJs8//7yp +W7eu8fPzKzJd09tvv23q1q1rgoODzQ033GBmzpxZZNtTp06Z/v37mxo1apiQkBBzyy23mHfeecdI +8sxkUJZ+nik3N9cMGzbM1K9f3zPN1Jnr/5GHpAr99ttvJiIiotTtN2/ebDp16mTCwsKM2+02V111 +lfnuu+/OWePLL780V111lQkKCjJRUVFm4sSJxdb9o9+HsozLGGMWL15sJJnvv/++zDXPdZxzcnJM +QkKCiYyMNFWqVDE33XTTOaeZGjt2rLnyyiuLtauE6cHK+iuuLNu+/PLLpmHDhsbtdpvY2FiTnJxc +bD9lWceY32dA6N69e5G2JUuWmKZNmxq3223i4uKKPJR26tQpExERYRYsWFCm8QBO4DKGV1MAsL/R +o0dr6tSp2rVrV2V3pcIsXbpUnTp1Unp6eom3e/wZHTlyRI0aNdJ///tfNW/evLK7UyGSk5M1fPhw +bdmyhVfv4k+Dp/gB2M769ev1/vvva/v27dq1a5emT5+u0aNH6/HHH6/srqGSRUZGavDgwXrhhRcq +uysVZvTo0Ro1ahThFH8qnEEFYDvr169X7969PdNiRUdHq3fv3nrqqadKnDnAqTiDCuDPioAKAAAA +W/k/yMrYZ8wYBhAAAAAASUVORK5CYII= +" /> +</div><hr><div class="info-header"><span class="info-header-title">Poly-A/T Tails</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5'-end</td> <td class="info-table-value">3'-end</td></tr> <tr><td class="info-table-type">Sequences with tail:</td><td class="info-table-value">1 (8.33 %)</td> <td class="info-table-value">1 (8.33 %)</td></tr> <tr><td class="info-table-type">Maximum tail length:</td> <td class="info-table-value">50</td> <td class="info-table-value">50</td></tr></tbody></table><br /><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAETCAYAAAD6XfR3AAAABmJLR0QA/wD/AP+gvaeTAAAcaUlE +QVR4nO3deXBV9f3/8dfNQkIgmBBAQJYoCoFQpBPcYkNBZUCdOEVrrZZpdYApZYkE0QYRIcHKIqJB +bNkaRSzBWgY1ihRRNAoMDksIi0EhUFAELgxRshmSnN8ffnN+hAQkcE7yucfnY+bO5H7OzXl/3oTl +xVk+x2dZliUAAADAEEFNPQEAAADgbARUAAAAGIWACgAAAKMQUAEAAGAUAioAAACMQkAFAACAUQio +AAAAMAoBFQAAAEYhoAIAAMAoBFQAAAAYhYAKAAAAoxBQAQAAYBQCKgAAAIxCQAUAAIBRCKgAAAAw +CgEVAAAARiGgAgAAwCgEVAAAABiFgAoAAACjEFABAABgFAIqAAAAjEJABQAAgFEIqAAAADAKARUA +AABGIaACAADAKARUAAAAGIWACgAAAKMQUAEAAGAUAioAAACMQkAFAACAUQioAAAAMAoBFQAAAEYh +oAIAAMAoBFQAAAAYhYAKAAAAo3gqoM6ePVs33XRTU08DAAAAl8EzAXX79u0qKipSs2bNmnoqAAAA +uAyeCKgVFRXKzMzUxIkTm3oqAAAAuEwhTT0BJyxYsED33nuvWrduXe/2fv362V9v2bKlsaYFAACA +SxDwAXXPnj0qKChQSkrKeT9zdigtLi5ujGkBAAD8LLRs2dLxfQb8Kf68vDwVFhYqOTlZycnJKi8v +V3Jysqqrq5t6agAAALgEPsuyrKaehJOSkpL06aefnnc7R1ABAACcwxFUAAAAeJ7njqD+FI6gAgAA +OIcjqAAAAPA8AioAAACMQkAFAACAUQioAAAAMAoBFQAAAEYhoAIAAMAoBFQAAAAYhYAKAAAAoxBQ +AQAAYBQCKgAAAIxCQAUAAIBRCKgAAAAwCgEVAAAARiGgAgAAwCgEVAAAABiFgAoAAACjEFABAABg +FAIqAAAAjEJABQAAgFEIqAAAADAKARUAAABGIaACAADAKARUAAAAGIWACgAAAKMQUAEAAGAUAioA +AACMQkAFAACAUQioAAAAMAoBFQAAAEYhoAIAAMAoBFQAAAAYhYAKAAAAoxBQAQAAYBQCKgAAAIxC +QAUAAIBRCKgAAAAwCgEVAAAARiGgAgAAwCgEVAAAABiFgAoAAACjEFABAABgFAIqAAAAjEJABQAA +gFF8lmVZTT2JxvQzaxcAAMBVPp/P8X2GOL5Hw5WUlDT1FAAAADyjZcuWju+TU/wAAAAwCgEVAAAA +RiGgAgAAwCiNGlDLysq4SQkAAAAX5FpAfeGFF/Tuu+9KkqqqqjR06FBFRESoS5cu2rp1q1tlAQAA +EOBcC6jPPfecrrrqKknSypUrlZubqzfffFMDBw7UuHHj3CoLAACAAOfaMlPHjh1TTEyMJCknJ0cP +PfSQfvvb36pv376Kj493qywAAAACnGtHUDt27Kjly5crPz9fOTk5Gjx4sCSpsrJSzZs3d6ssAAAA +ApxrATUtLU1PPvmkrr/+esXFxWnIkCGSpHXr1qlfv35ulQUAAECAc/VRpwcOHNDJkyfVt29fhYT8 +eDXB559/rsjISPXs2dOtshdUXFzcJHUBAAC8yI0nSbkaUGsUFxcrIiJCQUFNv+wqARUAAMA5AfWo +08rKSk2ePFkxMTGKjIxUYWGhJCkjI0NLlixxqywAAAACnGsBNT09XdnZ2Zo/f77Cw8Pt8e7duysr +K8utsgAAAAhwrgXUrKwsLV68WA8++KCCg4Pt8YSEBO3cudOtsgAAAAhwrgVUv9+vHj161BkPDQ1V +RUWFW2UBAAAQ4FwLqLGxsdqzZ0+d8dzcXMXFxblVFgAAAAHOtYA6ZswYjR8/Xps2bZIkHT16VMuX +L1dqaqrGjh3rVlkAAAAEONcedZqSkqJTp07p9ttvV1lZmZKSkhQeHq60tDSNHDnSrbIAAAAIcK6v +g1paWqrdu3erurpa8fHxrqyV1RCsgwoAAOCcgF2o3yQEVAAAAOcE1EL9GRkZeu211+qMv/rqq3rm +mWfcKgsAAIAA51pAXbBggXr16lVnvGfPnlqwYIFbZQEAABDgXF0H9corr6wz3qFDBx07dsytsgAA +AAhwrgXUzp07a+PGjXXGN27cqM6dO7tVFgAAAAHOtWWmRo4cqdGjR6usrEy33XabJOmjjz7ShAkT +9MQTT7hVFgAAAAHOtYD617/+VSdPntSf//xn+9GmYWFhevTRRwmoAAAAOC/Xl5k6ffq0vvjiC0lS +r169WAcVAADAQwJyHdTKykqVlJTo3DJRUVFulj0vAioAAIBzAmod1IKCAg0YMEDNmzdXVFSUoqOj +a70AAACA+rh2DeqwYcMUGhqqf/3rX2rXrp1bZQAAAOAxrp3iDwsLU35+vnr06OHG7i8Zp/gBAACc +E1Cn+Hv37q2ioiK3dg8AAACPci2gzpgxQxMmTND69et1/PhxnThxotYLAAAAqI9rp/h9Pt8Ft7u8 +eMB5cYofAADAOW6c4nftJqn169e7tWsAAAB4mOvroJqGI6gAAADOCaibpM5WXFys6urqxigFAACA +AOdaQK2srNTkyZMVExOjyMhIFRYWSpIyMjK0ZMkSt8oCAAAgwLkWUNPT05Wdna358+crPDzcHu/e +vbuysrLcKgsAAIAA51pAzcrK0uLFi/Xggw8qODjYHk9ISNDOnTvdKgsAAIAA51pA9fv99T5FKjQ0 +VBUVFW6VBQAAQIBzLaDGxsZqz549dcZzc3MVFxfnVlkAAAAEONcC6pgxYzR+/Hht2rRJknT06FEt +X75cqampGjt2rFtlAQAAEOBcW6g/JSVFp06d0u23366ysjIlJSUpPDxcaWlpGjlypFtlAQAAEOBc +X6i/tLRUu3fvVnV1teLj411ZzLUhWKgfAADAOW5kO9cCalFR0QW3R0VFuVH2JxFQAQAAnONGQHXt +FH90dPQFt//MnrAKAACAi+RaQF2/fn2t99XV1dq1a5cyMzM1bdo0t8oCAAAgwLl+Deq5Vq9erRdf +fFFr165tzLI2jtwCAAA4x+fzOb/Pxg6oBw4cUK9evVRWVtaYZW1cgwoAAOCcgLoG9cSJE3XG/H6/ +MjIy1LlzZ7fKAgAAIMC5FlDbtm173vHs7Gy3ygIAACDANdpNUj6fT61atVLv3r0VGhrqVlkAAAAE +uCZbB/VsjbkmKtegAgAAOCegrkH9qXVQz8ad9QAAAKjhWkBdtmyZJkyYoIcfflgDBgyQ9ONp/1df +fVUvvPCCOnXq5FZpAAAABDDXTvHfdddduvfeezVixIha44sWLdK7776rd955x42yP4lT/AAAAM5x +4xS/awE1IiJCBQUF6tKlS63xQ4cOqWfPniopKXGj7E8ioAIAADjHjYAa5Pge/09ERIR27txZZ3zH +jh2KiIhwqywAAAACnGsB9Y9//KOGDx+u119/XYcPH9ahQ4e0bNkyjRgxQn/605/cKgsAAIAA59pN +UrNmzdKZM2c0fPhwVVRUSJKaNWumUaNGaebMmW6VBQAAQIBz7RrUGt9//70KCgokSXFxcWrVqpWb +5X4S16ACAAA4J6BukjpbcXGxIiIiFBTk2hUFDZoLAAAAnBFQN0lVVlZq8uTJiomJUWRkpAoLCyVJ +GRkZWrJkiVtlAQAAEOBcC6jp6enKzs7W/PnzFR4ebo93795dWVlZbpUFAABAgHMtoGZlZWnx4sV6 +8MEHFRwcbI8nJCTUu/wUAAAAILkYUP1+v3r06FFnPDQ01L6rHwAAADiXawE1NjZWe/bsqTOem5ur +uLg4t8oCAAAgwLkWUMeMGaPx48dr06ZNkqSjR49q+fLlSk1N1dixY90qCwAAgADn2kL9KSkpOnXq +lG6//XaVlZUpKSlJ4eHhSktL08iRI90qCwAAgADn+jqopaWl2r17t6qrqxUfH+/KWlkNwTqoAAAA +zgnYhfolqaqqSpWVlQoLC2uMcudFQAUAAHBOQCzU//777ys7O7vW2AsvvKCoqCg1b95cd999t77/ +/nunywIAAMAjHA+oM2bMkN/vt99v2bJFjz32mJ544gmtWrVK+/fv17Rp05wuCwAAAI9w/BR/TEyM +PvzwQ/Xt21eSNHHiROXn52vt2rWSpPfee08pKSnav3+/k2UvGqf4AQAAnBMQp/iLiorUrl07+/3m +zZvVv39/+32fPn10+PBhp8sCAADAIxwPqFFRUfrmm28kSZWVldq+fbt++ctf2tvLy8sVEuLa6lYA +AAAIcI4H1AEDBig9PV0HDx7U888/L0m1jqDm5+erW7duTpcFAACARzh+KHPmzJkaOHCgrr76avl8 +Pr344ouKjIy0t7/55ptKSkpyuiwAAAA8wpV1UMvLy5WXl6cOHTqoa9eutbZt2LBB11xzjTp06OB0 +2YvCTVIAAADOCeiF+k1BQAUAAHBOQNzFDwAAAFwOAioAAACMQkAFAACAUQioAAAAMIqrATUqKkoH +Dx50swQAAAA8xvGAmpubq7KysjrjLVu21L59+5wuBwAAAI9xPKCOGDFCUVFRuvnmm1VaWqqNGzfq +hx9+cLoMAAAAPMrxgPrll1/q0KFDevzxxxUcHKxp06YpJiZGpaWlWrJkiTZt2qQzZ844XRYAAAAe +4fhC/V9++aW6d+8u6cdrUPPy8hQSEqLrrrtOgwcPVn5+vo4dO6aSkhIny140FuoHAABwjhsL9Yc4 +vcN+/fopPDxciYmJKisr01dffaVBgwYpODhYc+bM0bXXXquvv/7a6bIAAADwCMdP8RcVFWndunUa +MmSIfD6fHnjgAXXu3Fnl5eV6++23deDAAXXq1MnpsgAAAPAIx0/xny0qKkrbt2+X3+9X//79lZCQ +oPz8fEVFRenw4cNulb0gTvEDAAA4JyBO8Z/L5/PpxhtvVEhIiJYuXarY2Fht2bLF7bIAAAAIUK4G +1KKioroFQ0J08803u1kWAAAAAcz1I6g1OLUOAACAi+Hqo04BAACAhiKgAgAAwCiu3sVvop9ZuwAA +AK7y+XyO77PRrkE1RVM9wQoAAMCLAnKZKQDAhc2ZU/cv94kTubEUwM8X16ACAADAKARUAAAAGIWA +CgAAAKMQUAEAAGAUAioAAACMQkAFAACAUQioAAAAMAoBFQAAAEYhoAIAAMAoBFQAAAAYhYAKAAAA +oxBQAQAAYBQCKgAAAIxCQAUAAIBRCKgAAAAwCgEVAAAARiGgAgAAwCgEVAAAABiFgAoAAACjEFAB +AABgFAIqAAAAjEJABQAAgFEIqAAAADAKARUAAABGIaACAADAKARUAAAAGIWACgAAAKMQUAEAAGAU +AioAAACMQkAFAACAUQioAAAAMAoBFQAAAEYhoAIAAMAoBFQAAAAYhYAKAAAAoxBQAQAAYBQCKgAA +AIxCQAUAAIBRCKgAAAAwCgEVAAAARiGgAgAAwCgEVAAAABiFgAoAAACjEFABAABgFAIqAAAAjBLS +1BNw0unTpzVp0iSdOHFCbdu21cyZM9WiRYumnhYAAAAawFNHUJcsWaIbb7xRK1as0A033KB//vOf +TT0lAAAANJCnAurGjRs1ZMgQSdJdd92lzz77TJLUr18/+wUAAACzeeoU//Hjx9W2bVtJUps2bXTi +xAlJ0pYtW+zPFBcXN8ncAAAAcJEsD+nfv79VXV1tvx84cGC9n0tISGCcccYZZ5xxxhln3MFxJ3kq +oN53333WsWPHLMuyLL/fb91///1NMo/G+MFRl7rUpS51qUtd6nqVp65BTUxM1Jo1ayRJq1evVmJi +YhPPCAAAAA3lsyzLaupJOOX7779XWlqaTp48qTZt2mjmzJmKjIxs6mkBAACgATwVUAEAABD4PHWK +HwAAAIHPU8tM/RwtXLhQOTk58vv92rx5c61tXnuy1pYtWzR37lxVVVUpKChIaWlpuv766yV5r9ca +//73v7Vy5Ur5fD5J0rhx43TrrbdK8m7PkjR79mytXLmy1u9pL/abmJio2NhYSdIf/vAH3X333ZK8 +2WuNhQsX6sMPP5RlWbr//vv1u9/9TpJ3e547d6691GF5eblOnTql9evXe7LfTz75RC+//LIkyefz +acyYMerfv78kb/589+7dq/T0dFVWVqpz586aPn26IiIiJHmz30bXpLdo4bLt3LnTOn78uPWrX/2q +zra5c+daS5cutSzLspYuXWplZmY29vQctW/fPuvkyZOWZVnW1q1braFDh9rbvNZrjZKSEvvrwsJC +a9CgQfZ7r/a8bds2a9KkSXV+T3ux3/r+3FqWN3u1LMt66623rKlTp1pVVVWWZVnWqVOn7G1e7fls +K1assNLT0y3L8ma/gwYNsvbv329ZlmUdPHjQGjx4sL3Ni/0OGzbM+uyzzyzLsqwNGzZY8+bNs7d5 +sd/Gxin+ANe7d2/74QTnOt+TtQJVt27d1Lp1a0nSL37xC508edLe5rVea9T8b1ySSktLdeWVV9rv +vdhzRUWFMjMzNXHixDrbvNjv+Xi111WrVumRRx5RUNCP//RERUXZ27za89n++9//2j16sd9OnTrZ +D8M5ffq0OnbsaG/zYr//+9//dNNNN0mSbr755lo9ebHfxsYpfg8735O1vOCdd96xT3VL3u51xYoV +WrFihcrKyrRo0SJ73Is9L1iwQPfee6/9H5GzebFfy7L00EMPqWXLlpo0aZKuvvpqSd7sVfrxH/T3 +339fH3/8saKjo/Xkk0+qc+fOkrzbc40jR47oyJEj9iO3vdjvM888oxEjRsjn88myLC1evNje5sV+ +u3Xrpg8++EB33nmnPvjgAx09etTe5sV+GxtHUBFw9u7dq2XLlik1NbWpp9Iofv/73+utt95SSkqK +Zs2a1dTTcc2ePXtUUFCge+65p6mn0mhycnK0fPly/eY3v9H06dObejquq6qqUteuXbVixQoNHTpU +GRkZTT2lRrN27Vrdcccd9tFjL5o9e7ZSUlL03nvvafz48XruueeaekqumjJlilatWqUHHnhA+/bt +U3BwcFNPyVO8+ycFatu2rfx+vyTpxIkTatOmTRPP6PIdO3ZMkyZN0owZM2pd2uDFXs81ZMgQ7dq1 +y37vtZ7z8vJUWFio5ORkJScnq7y8XMnJyaqurpbkvX4lKTo6WpI0ePBg7d+/3x73Yq+S1L59ew0a +NEiSdMcdd+irr76yt3m15xpnn96XvNnv9u3bdccdd0j68ee7Y8cOe5sX+73mmmu0aNEivfHGG7rn +nnvUpUsXe5sX+21sBFQP89qTtUpKSpSamqrx48erZ8+etbZ5rdcaR44csb/Ozc21TwFL3uv5oYce +0po1a5STk6OcnByFh4crJyfHPuLktX6Liopk/d8y1J999pm6du1qb/NarzUSExP1+eefS/pxVY6z +/0H3as+SVFhYqNLSUvXu3dse82K/nTp1sn++mzdv1lVXXWVv82K/3333naQfL9V55ZVXlJycbG/z +Yr+NjYX6A9z8+fO1evVq+f1+tW3bVnfddZfGjh0ryXtP1lq2bJkWLVpkX7MmSa+//rqCgoI812uN +GTNmKC8vT5ZlKSoqqtZ1il7tuUZSUpI+/fRT+73X+l2zZo2ysrIkSeHh4XrqqafUvXt3Sd7rtUZx +cbGmTJmib775RqGhoZo6darne5akf/zjH7IsS6NHj7bHvNjv7t279be//U0VFRVq1qyZJk+erPj4 +eEne7Pc///mPsrOzFRwcrP79+2vMmDH2koBe7LexEVABAABgFE7xAwAAwCgEVAAAABiFgAoAAACj +EFABAABgFAIqAAAAjEJABYB6fPzxx/L5fPYjCs99H6gupQ8nevfKrx+AxkFABWCUmiBz7mvFihV1 +PlNf2Knve899XYzExER9++23iomJadC8TQhgNXMpKipyZH8N/bUAgMsV0tQTAID67N69W61bt7bf +R0VFXdT3ffvtt/bXGzdu1H333ae9e/eqVatWDarfrFkztW/fvkHf41X8WgBobBxBBWCkdu3aqX37 +9vYrPDz8or7v7O+pCbjn7kuSli5dqr59+yosLEzR0dEaNmxYrSOObhwRnTdvnnr06KFmzZqpU6dO +evrpp1VVVVWn5tq1a5WQkKCwsDDdcMMN2rt3r/2ZiooKpaamqm3btmrRooWGDh2q7OzsWkdMBw4c +KEmKjo4+71Hjbdu2nbfGuc53ucOF5nk+eXl5SkxMVHh4uLp27ar58+fXW2vdunUX/BwAbyOgAjBS +QkKCWrdurX79+tmPBHVSUFCQ5s6dq3379umtt97Sjh07NG7cOMfr1Jg2bZr+/ve/68UXX1RhYaFe +ffVVLVu2TE8//XSdz6anp+vll1/Wjh07FBISolGjRtnbHn30Ub3xxhtaunSpvvjiCyUnJys1NbXW +969cuVKStHfvXn377be1jipfTI2LdSn7+Mtf/qJJkybpyy+/1JQpUzRx4kS98sorl/w5AB5lAYBB +CgoKrIULF1rbt2+3duzYYc2YMcNq1qyZNWfOnAbva/369ZYk69SpUz/52VWrVlktWrSwqqura32v +3++v9/35atW3vaSkxGrevLm1cePGWuPLly+3WrduXWcfH330kT32xhtvWCEhIdaZM2es7777zgoN +DbWys7Nr7SctLa1Wnxfq+6dqXExvl7OP1157rdb4E088YcXFxTX4cwC8jWtQARilR48e6tGjh/2+ +T58+OnPmjGbNmqXHHnvMsTobNmzQ1KlTlZ+fr7KyMlVWVqq8vFzFxcWKjIx0rI704/W0ZWVlGjRo +UK3xqqoqu2bLli3t8fj4ePvrdu3aqbKyUiUlJSooKNCZM2d066231tpPUlKSZs6c2aA5na/GFVdc +4eo+fv3rX9d5P3v2bP3www8KCwtr8OcAeBOn+AEY76abbpLf71dpaakj+ysqKtKdd96pTp066e23 +39a2bdu0cOFCSap1TahTqqurJUlr1qxRXl6e/dq5c6e++uorRURE1Pp8UFDdv5oty7K/Pvea0otd +maAhNdzax8XO9VJ6AuAdBFQAxtu+fbtat25dJ8hdqj179uj06dOaPn26brnlFl133XU6fvy4I/uu +T3x8vMLDw3Xo0CFde+21dV71Bb36xMXFKTQ0VBs2bKg1/umnn9Z6HxwcLOn/B2OTfPLJJ7Xe5+bm +Ki4urs5R0Yv9HABv4hQ/AKPMmTNHvXr1Uq9evVRdXa3Vq1crPT1dkydPdqxGbGysgoOD9dJLL2n0 +6NHKy8vTvHnzHNn3rl276iyJ1adPH6WlpWncuHGqqqpS//79debMGW3dulV79+6t90ap+lxxxRUa +Pny4JkyYoFatWql379766KOP7JuHao46du3aVZL0zjvv6O6775bP51ObNm0c6e9yZWRkKDo6Wn36 +9NEHH3ygzMzMeu/Qv9jPAfAmAioAo3z33XcaO3asvv76awUFBSkuLk7PP//8Jd1lfj4dO3bUokWL +9NRTT+mll17SrbfequnTp+vhhx++7H3XLPF0ttOnT2vq1Knq0KGD5syZoxEjRig0NFTx8fEaOXJk +g/afmZmpsLAwDRs2TOXl5brttts0Y8YMPfLII/ZSXF26dNEzzzyjJ598UsOHD1d1dXWDT9+7Zf78 ++Xr66aeVl5endu3aadasWRo+fPglfw6AN/ksU/7WAgBckmeffVaLFi3SwYMHm3oql+3jjz/WwIED +5ff7jTnqC6DxcQQVAALIjh07tHPnTt1yyy0KDg7WunXr9Oyzz2rKlClNPTUAcAwBFQACTGZmpkaN +GqUffvhBsbGxmjJlih5//PGmnhYAOIZT/AAAADDK/wPJN6T2HKU/VQAAAABJRU5ErkJggg== +" /> +<br /><br /><img border="0" src="data:image/png;base64,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 +aPjw4ercubMkd/589+3bp+TkZJWUlKhp06aaOHGiQkJCJLmz32pXo7do4abt2LHDOnXqlPWLX/yi +0rZp06ZZ8+fPtyzLsubPn2+lpqZW9/RsdeDAAevMmTOWZVnWF198YfXt29e7zW29lsvPz/d+nZ2d +bXXv3t373q09f/nll9bYsWMr/Z52Y79V/bm1LHf2almWtXTpUuvll1+2SktLLcuyrLNnz3q3ubXn +iy1atMhKTk62LMud/Xbv3t06ePCgZVmWdfjwYatHjx7ebW7sd9CgQdb69esty7KsDRs2WDNnzvRu +c2O/1Y1T/D6ubdu23ocTXOpyT9byVS1atFC9evUkST//+c915swZ7za39Vqu/H/jklRQUKBbb73V ++96NPRcXFys1NVVjxoyptM2N/V6OW3tdsmSJnnzySfn5/fhPT1hYmHebW3u+2P/+9z9vj27st0mT +Jt6H4Zw7d06NGjXybnNjv0eOHNH9998vSerUqVOFntzYb3XjFL+LXe7JWm6wbNky76luyd29Llq0 +SIsWLVJhYaHmzJnjHXdjz7Nnz1a/fv28/xG5mBv7tSxLAwcOVN26dTV27FjdfvvtktzZq/TjP+if +fPKJ1q5dq/DwcL3wwgtq2rSpJPf2XO748eM6fvy495Hbbuz3lVde0ZAhQ+TxeGRZlubOnevd5sZ+ +W7RooZUrV6pXr15auXKlTpw44d3mxn6rG0dQ4XP27dunBQsWKDExsaanUi1++9vfaunSpUpISNCU +KVNqejqO2b17t/bu3atHHnmkpqdSbTIyMrRw4UL96le/0sSJE2t6Oo4rLS1V8+bNtWjRIvXt21cp +KSk1PaVqs2LFCnXr1s179NiNpk6dqoSEBH300UcaNWqUXnvttZqekqPGjx+vJUuW6LHHHtOBAwfk +7+9f01NyFff+SYEaNGignJwcSdLp06dVv379Gp7RzTt58qTGjh2rSZMmVbi0wY29Xqpnz57auXOn +973bes7KylJ2drbi4+MVHx+voqIixcfHq6ysTJL7+pWk8PBwSVKPHj108OBB77gbe5Wk2267Td27 +d5ckdevWTV999ZV3m1t7Lnfx6X3Jnf1u3bpV3bp1k/Tjz3fbtm3ebW7s94477tCcOXP0/vvv65FH +HlGzZs2829zYb3UjoLqY256slZ+fr8TERI0aNUqtW7eusM1tvZY7fvy49+vMzEzvKWDJfT0PHDhQ +y5cvV0ZGhjIyMhQcHKyMjAzvESe39Zubmyvr/5ahXr9+vZo3b+7d5rZey8XGxurzzz+X9OOqHBf/ +g+7WniUpOztbBQUFatu2rXfMjf02adLE+/PdvHmzGjdu7N3mxn6///57ST9eqvP2228rPj7eu82N +/VY3Fur3cbNmzdLHH3+snJwcNWjQQL1799aIESMkue/JWgsWLNCcOXO816xJ0nvvvSc/Pz/X9Vpu +0qRJysrKkmVZCgsLq3Cdolt7LhcXF6d169Z537ut3+XLlystLU2SFBwcrBdffFEtW7aU5L5ey+Xl +5Wn8+PH65ptvFBgYqJdfftn1PUvS3//+d1mWpWHDhnnH3Njvrl279Je//EXFxcWqVauWxo0bp5iY +GEnu7Pff//630tPT5e/vr86dO2v48OHeJQHd2G91I6ACAADAKJziBwAAgFEIqAAAADAKARUAAABG +IaACAADAKARUAAAAGIWACgBVWLt2rTwej/cRhZe+91U30ocdvbvl1w9A9SCgAjDKkSNH1KVLF0VG +RiogIED169fXgAED9PXXX3s/c6Ww4/F4rvq6FrGxsfr2228VERFxTZ83KYCVzyU3N9eW/V3vrwUA +3CwCKgCjBAQE6Pe//71WrFihI0eO6MMPP9SxY8fUq1eva/r+b7/91vtavHixJGnfvn0Vxq9FrVq1 +dNttt11zoHUzfi0AVDcCKgCjNG7cWE899ZTat2+vxo0bq1OnTho3bpx27typvLy8q37/bbfd5n3V +q1dPkhQZGVlhXJLmz5+v9u3bKygoSOHh4Ro0aFCFI45OHBGdOXOmWrVqpVq1aqlJkyZ66aWXVFpa +WqnmihUr1KFDBwUFBenee+/Vvn37vJ8pLi5WYmKiGjRooDp16qhv375KT0+vcMS0S5cukqTw8PDL +HjX+8ssvL1vjUpe73OFK87ycrKwsxcbGKjg4WM2bN9esWbOqrLVq1aorfg6AuxFQARjtu+++0/z5 +89WtWzfVrVvXtv36+flp2rRpOnDggJYuXapt27Zp5MiRtu3/UhMmTNDf/vY3zZgxQ9nZ2XrnnXe0 +YMECvfTSS5U+m5ycrDfffFPbtm1TQECAnn76ae+2Z555Ru+//77mz5+vPXv2KD4+XomJiRW+v6oj +x9dT41rdyD7+9Kc/aezYsdq/f7/Gjx+vMWPG6O23377hzwFwKQsADNSzZ08rJCTEkmT179/fOn/+ +/HXvY82aNZYk6+zZs1f97JIlS6w6depYZWVlFb43JyenyveXq1XV9vz8fKt27drWxo0bK4wvXLjQ +qlevXqV9rF692jv2/vvvWwEBAdaFCxes77//3goMDLTS09Mr7CcpKalCn1fq+2o1rqW3m9nHu+++ +W2H8ueees6Kjo6/7cwDcjSOoAIw0b948bd26VYsXL9bmzZv1/PPP27r/DRs2qFu3boqMjFRoaKgG +DBig/Pz8a7qM4Hrt2rVLhYWF6t69u+rWret9PfXUU/ruu+8q1YyJifF+HRkZqZKSEuXn52vPnj26 +cOGCHnzwwQqfj4uLu+45Xa6G0/v45S9/Wen93r17df78+Rv6HAB3CqjpCQBAVRo3bixJatmypS5c +uKBBgwZp0qRJCg4Ovul95+bmqlevXurXr58mTpyo+vXra9OmTXr88ccrXBNql7KyMknS8uXLvdfA +XiwkJKTCez+/yscOLMvyfn3pNaU3cvPS1Wo4tY9rnSs3ZAE/bRxBBeATLMuyLbTs3r1b586d08SJ +E/XAAw/orrvu0qlTp2zZd1ViYmIUHByso0eP6s4776z0qiroVSU6OlqBgYHasGFDhfF169ZVeO/v +7y/p/wdjk3z22WcV3mdmZio6OlpBQUE39DkA7sQRVABG+c9//iPLsnTPPfcoMDBQX375pZ5//nk9 ++uijtoWTqKgo+fv764033tCwYcOUlZWlmTNn2rLvnTt3KiwsrMJYu3btlJSUpJEjR6q0tFSdO3fW +hQsX9MUXX2jfvn1V3ihVlZ/97GcaPHiwRo8erVtuuUVt27bV6tWrvTcPlQf45s2bS5KWLVumPn36 +yOPxqH79+rb0d7NSUlIUHh6udu3aaeXKlUpNTa3yDv1r/RwAdyKgAjCKn5+fUlJStG/fPhUXF6tZ +s2YaOHCgxo8fb1uNRo0aac6cOXrxxRf1xhtv6MEHH9TEiRP1xBNP3PS+y5d4uti5c+f08ssvq2HD +hnr99dc1ZMgQBQYGKiYmRkOHDr2u/aempiooKEiDBg1SUVGRHn74YU2aNElPPvmk9/KHZs2a6ZVX +XtELL7ygwYMHq6ys7LpP3ztl1qxZeumll5SVlaXIyEhNmTJFgwcPvuHPAXAnj2XK31oAgBvy6quv +as6cOTp8+HBNT+WmrV27Vl26dFFOTo4xR30BVD+OoAKAD9m2bZt27NihBx54QP7+/lq1apVeffVV +W48wA0BNI6ACgI9JTU3V008/rfPnzysqKkrjx4/Xs88+W9PTAgDbcIofAAAARvl/A+iy/g/+4H8A +AAAASUVORK5CYII= +" /> +</div><hr><div class="info-header"><span class="info-header-title">Tag Sequence Check</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">5'-end</td><td class="info-table-value">3'-end</td></tr><tr><td class="info-table-type">Probability of tag sequence:</td><td class="info-table-value">33 %</td><td class="info-table-value">33 %</td></tr><tr><td class="info-table-type">GSMIDs or RLMIDs:</td><td class="info-table-value">none</td><td class="info-table-value"> </td></tr></tbody></table><br><table border="0" cellspacing="0" cellpadding="0"><tr><td><img border="0" src="data:image/png;base64,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" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="66"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="58"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="58"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="75"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="75"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="75"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td align="center" valign="middle"> ... </td><td valign="bottom" align="center"><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="58"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="33"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="50"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="58"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAACXBIWXMAAAsTAAALEwEAmpwYAAAK +T2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AU +kSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXX +Pues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgAB +eNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAt +AGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3 +AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dX +Lh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+ +5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk +5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd +0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA +4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzA +BhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/ph +CJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5 +h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+ +Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhM +WE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQ +AkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+Io +UspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdp +r+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZ +D5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61Mb +U2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY +/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllir +SKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79u +p+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6Vh +lWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1 +mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lO +k06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7Ry +FDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3I +veRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+B +Z7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/ +0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5p +DoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5q +PNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIs +OpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5 +hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQ +rAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9 +rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1d +T1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aX +Dm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7 +vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3S +PVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKa +RptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO +32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21 +e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfV +P1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i +/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8 +IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADq +YAAAOpgAABdvkl/FRgAAAh1JREFUeNrsmk1xwzAQRr8RgYRBwqBhkDJoGbQMagZ1GbgMVAYNA5dB +wsBm4CBwL9Wx0Uwk7593Z3z0SHmRn3fXi3me8d8FoAUw33kdQB/9PXu9xWCeZ4QFN9zBSCwJ6Qig +cUj5aAFsHdLt2Fh47ALBGi8AHh2ScYlTQXrQLPFAuJZaiVNC2gCIDikfTxolHhjWjA4pH7s/Pzmk +TDQA9g7JUCYeGNdWI/HAvH50SEYkHgTs4V26xIOQfUSHlI8jgGeHlI9OagEsCdIOQtspQdh+REo8 +CPzjokNSKPGlIJ0qnKatdUgdgJ/CArhdw+NW+qZ6A888ASmkM4DPCifSvLhbANdCib9ahzRV+JHs +mThFCvCtXeJUeVLpaWKVOBWkAcCH1kycMuPuAIwF97PNE1BCqiHxlkPi1LVbX1iysHyK4ihwm8Lc +iXwojAPSUOE0dNYhJbdctEics5/UVAC9tQ6pB/BVKPFoHVINiZPME3BDmirUZdE6pPSmKimAF58n +kPIhoKlw/946pDPKupiLZuKSPim1FSR+sA6pRgG8sQ4JKO9iYg2QAAGNfw2QBpR3Mc1DSrnT6JCW +l7h5SKkAPjmk5QvgVUAaIGAeQDqklImPDkl47qQFUo+yLuYqILFKXBOkCUzTJZogpUz84pAESlwj +pDPKZzHNQ0q509Uh5SXeOKR8RBB1MTVDIpO4dkgDCLqY2iGl3Gl0SMwS/x0AsYSfWCRqIfIAAAAA +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td><td valign="bottom" align="center"><img border="0" height="16"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAAzVJREFUeNrsnMFxo0AQRWe7fJcyMBnYGawyMIe9a0JQJtbefDPOAB33 +JmdgZyBlsIpgl9lCLkwJA/N7uhu0XTXlkstI8Oh+agbG355+/XDC8VaNu8htf1ZjI73DJPx59wCg +EN4phDQkNAsWGqCkIeUM7zFrSL7OBDS+VyObMyQrZWsSUlZnACfw5dwgcZ/5BZPfTEHyEwCvColL +2O24q/uuWUDKJ1TGKpCCsB8Sn4Dl1CGlbvxEBD51SCIlR4lL4VYAUnKB08SzSCSbUkFKLWxRgdMM +sii5wK1BOlksuRSQVoCwA9wjIPDVVCAhWVTWw1SZc0MK8lxHblvUP7fA569TCJyMZFET0qEa75ay +iRtSrDwDlLfG663CPohAQoRdtF4jXrrlFjgZKbU2lN/VeLFSclyQlkAzt6s95BiziVXgXJByFz/7 +WH7x+6OFbOKCFCvL0wUffeUqFYFzQELu7/eVFAKJTeCkmEVDIARXvWqXHAoJEXbwzZ4BZJ/AM21I +iLCLESV50swmMlxqzZ6pnCqkDBD2a0dvlErguRYkiSw6x16zZyKlDy4FwDbjARE4AYBihf1Se0YS +EnRSaSJZpNozxUAKaRv7QNYR/KZSEXgMpI1CFjUhifdMMZBypUzgAB0lcIoAFDv72J6ijY0tuL1P +DckrZ5GrQSM90yYlpMxh9/cfq/GHaSBPq4xeVUBCWWQt/kMaEKNWFQyFJPVAlmRsuCF5N7/wnJCW +TvaBLKkYLHC60iwadWzEWbtzFXgfpNUMhT06CeiKS23wMVKPsNdXAKlX4HTlWTToWG8SQdoxXK3H +zA7E3r0JAr/vmqXogoSu3w87vFeA9AwK3I8pN+Rr/6gAKAQ669m5qoA6hJ0r7mxsoE/Hda4qoA6i +CzDttaJI0TMRc6mFKdqDIqS9w2YtLy4LowTC1o4tdzYR83VaaQASu8Dpwh/ERuzta+441H0am8Cp +1TwuJp5FSQROTB32yRgk9Om4TwI/Q8oc9g9XCmcv2LKJmIRtERL6LfexqoAYSo3r9nUKgb+D7+HP +kFBhW8wi1p6JHL4KujQMCRX4v1UFARJyu2infBky5KIXPYn+rwADAOL8qKxS08x7AAAAAElFTkSu +QmCC" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA7BJREFUeNrsnM1xqzAQxxUNDfBKwCWQCt7g+7vgEkgJ5pRDTnYJpgRz +eXeYVBBKCCU8SvAzM6sZxuMPaXclQaydYYKTGPBv/7tagdYvp9NJTO3Px6dwZPl5S2A/hdf3rD9v +1eT1nvuC/r7/vvr7SLizDGAUEzgmNr5nN3mt9ksAWNu6cNuQYoCyhX0bpmANoK4K9tlMWrrw0euH +8/YPPkTsQKkxnIv9nNKSZ79BQb5sy3kNkjnnfMMFzsFiUHNDVZVk9FyDTMguBowvGDS8QTpejDpz +tARAZT4gNRr1zZyswYCSrk84Azuahp58MkAqoR9NkjkG0m7BgG5V76yQcgtD/B6mFqvz9nJlW8Pf +uacdha6zI0P6B6YLbGH6UGv+b3tRbnCNpgdwDpuSOEr9cU61AXXUBOX9YlJWolOVS4MwyxnUs2L6 +cAr2G1MhzAKJKu8K1DMw55UKYFHVlFMhYe//KKuZPH7v+CXxGCyQsNZbBjTNUzURUoyFlFEmhhAK +g3BjVDUVWEg5MV90DgvEy3vgppZi66ScGAKurTJMDxXAvXuPPMLGqUYy7T1A6mBLHxSlRg6MMPLT +hOTLWnBuNVELKS9GD5I2ttDzCalkSOJaiTsmKKkVP8wks4qE4xHNKyRKhd0HSCHcyCPb4LDC9g4p +DqFmL9yGZ4EUkrbhBDeYBSWJoKQAKViAFCAFSLOERKl1kqCkoKSgJFMl9QGSPUijpQHSE6rppypJ +tU5Y7Qig3IL1vZ5ydNJ403BcdzSuZBt71Rp4ncxJSbFHSNmN36melxMAK6iQhgWrSWf9wu6KylBL +byiQCo+hliIcqlTmFFLmaZSjOKfCQFIrNLDmuqUrIULqsHO3muhVl+UAxSl3F3lIDQlSHhMZ9XAQ +w9tKqOlAUs2/lBA4OAgz6jlIkDjUlFsEpTqOqGsXeiokqppUfmqYQy+BY1Lz3sPPJg0O1DPkDXSL +5xV1fjEAanVKHZM7kxtG72ObCjN4L9eAoLUQ36SVqwNFcdQ/GWzTUL6V+7aTn5zhqh0dpl/DUYLE +ueZm6lshhHDbEd4Lg8WnmAcBG7H8dZFGqQMDSfWa9QsG1NmGpOS6XiAoVC+vJMb164JCr8TWe9SH +kwOAqmcO6I1SEEvGON/MEI5KC5QWL9bH3KOaVjNSVQXXQ15XLi14TrW0+1r03kIKYGtrlRYvdM0h +dUPlvMI5WQeTyIFXW/Cqeu5VMIPpheUuTZdfobifjDTTXvxYcz5YXsBxtrD+vwADADoA0kx0ZQr1 +AAAAAElFTkSuQmCC" /> +<br /><img border="0" height="25"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAA6lJREFUeNrsnN2RqjAUgANjA9wS3CefsQQsAUtgS8AStAQsQUuQEuR5 +nzYlSAkumTnZy/UKJpyTEANn5syqs0L8cn4hIbjf70zI19eaWZS40aT1Pm80Uvhe1ei59b6Ez8hl +tbr+vl5YhpLCa8xx4h54RqCZhCQsI9OwEkYEr2700OgRXqMlNARn3+gN/kbMrrTPXzS6dA2SHFzO +3BBhyd8wrtEhJTAYV+A8Sg7ji8eCJGbpQmHWhkWM7wrJwxqkCODk7L3kpDvmBWJW3sF6+qyfQRY0 +YknvDqgNKjUByRdAUgqVYK4DKQJ/9gWQ/E0FJSQl6gNExIVdo9tGgw5dw/8cDJw/fhXIA8UGN8cW +ZA9ybPVaQ4vEjHDSapgI/qzBDRXjEBUgAeaj0U8EIAl5Dcepidwux7hbQTRTG3ApTmyRa6LOP+3q +M0OFLybIk1fwQ0pmRjhMQEVgTdkQSHsCQBti6+mzVE5gTVqQMmS6l4BqZkckKGymi3UhYQa8tQio +7Xo7gisaSpASZHrdWXCxvrqLI61JqcFNkW52HLmSPmrG0yOA5ezfGw2dxaSI8t9s+GXXjcFMppOp +bj21WgWhoHMyX90tSRCAuAOAZEws4XecdS6LPJOFik9qmq0rsqE6UEic1VyCxExBWiJcrRoh5Y8C +CeNqJfNUKCFVU4GEaUP4DGm2JDQkb63oEVKEyGz1lCCxGZJaMemKiKL2PpJeuiDNme0NLck7SNFU +INUzJLOQ2AzptSxnSLO7kaTyyGdQVJC8drmQsJOPpwJpDt4KkDCXYBPisYmbCgFSuSl3qxHuFk3B +krDWlE0FEiZ4p1OBdEZmuHgKkDjSmrIpQMJaU2Yg0zkJCXtPfz8FSDUSVOwTqL4rk9gtCvnI2Y6s +6e6DRLEg6zRSfBLnvNqAJOST4BwXyxZVMOLtZq8gcUazMOtkIUaJrHozUYKo3C2hWm6cgwtQu5/c +qV2Y6h1VINUMv4C8nfUuoBnyOALOHSzU6GWaQOOBLntmZue2XDLMe4rYpHWVwcbu8XK1uv4uTNXZ +zb1j/z+thkJS1xtj3Tu4W+bxYq22JWEgyZ1APoPaPhbSQ9YCSFC+rbYVE//xLC4OXTAhQR08ASTi +7bqr1AkJDr59YziiUP7zarIplt6cu8zUcTjKu8Gp1idxsCjXg/qB/d1yrzxO6pVuJcyQS6VCBWEh +GNpiBYYfoSiLz/0IYM6gg/rO9qbAwOJzJmVrgd0l3pdEGFXGbUP6EWAA2LwDwtC8jpAAAAAASUVO +RK5CYII=" /> +<br /><img border="0" height="41"width="14" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEkAAABJCAYAAABxcwvcAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAALRJREFUeNrs09ENQDAUQFHEXlhAYgJWMJnEBLqBUWxQFkCC/si5yftq +mzYnaR5jzM4KXXu++J9CNc311YYi022QIEGCBAkSJEiCBCll5c16k+DO4Zj+4dnxmPXj92xvkZYE +SPWLs2uiN/lukCBBggQJkiBBggQJEiRIggQJEiRIkCBBEiRIkCBBggRJkCBBggQJEiRICCBBggQJ +EiRIggQJEiRIkCAJEiRIkCBBggRJ1+0CDAAzsw5U48snWgAAAABJRU5ErkJggg==" /> +<br /><img border="0" height="8"width="14" src="data:image/png;base64,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 +SUVORK5CYII=" /> +<br /><img border="0" height="6"width="16" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAGCAYAAAACEPQxAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ +bWFnZVJlYWR5ccllPAAAABdJREFUeNpiYGBg+M/w//9/BmwEQIABANxBD/HRDNRSAAAAAElFTkSu +QmCC" /> +</td></tr><tr><td> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">1 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">5 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">10 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">15 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">20 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">20 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">15 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">10 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">5 </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;"> </td><td valign="top" align="center" style="font-size: 10px;margin: 0;">1 </td></tr><tr><td align="left" valign="middle"> </td><td align="center" valign="middle" colspan="41" class="pinfo"><b>Position from Sequence Ends</b></td></tr></table></div><hr><div class="info-header"><span class="info-header-title">Sequence Duplication</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value"># Sequences</td> <td class="info-table-value">Max duplicates</td></tr><tr><td class="info-table-type">Exact duplicates:</td><td class="info-table-value">4 (33.33 %)</td><td class="info-table-value">3</td></tr><tr><td class="info-table-type">Exact duplicates with reverse complements:</td><td class="info-table-value">0</td> <td class="info-table-value">0</td></tr><tr><td class="info-table-type">5' duplicates</td><td class="info-table-value">0</td> <td class="info-table-value">0</td></tr><tr><td class="info-table-type">3' duplicates</td><td class="info-table-value">0</td> <td class="info-table-value">0</td></tr><tr><td class="info-table-type">5'/3' duplicates with reverse complements</td><td class="info-table-value">0</td> <td class="info-table-value">0</td></tr><tr><td class="info-table-type">Total:</td><td class="info-table-value">4 (33.33 %)</td><td class="info-table-value">-</td></tr></tbody></table><br /><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAETCAYAAAD6XfR3AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nO3deViVdf7/8dcBQQQlUHAbSaxUUDMuMytm3HLJZbByxo00K3XUJBWzcskUdCyXbNwq960B +rfzqhDTmEm7p2NiM5JI2jaaVG6iYoIDC/fvDH2dAIFHPDefcPB/XxXVxPvd97vfnc3vO4eW9fI7N +MAxDAAAAgJNwK+sOAAAAAPkRUAEAAOBUCKgAAABwKgRUAAAAOBUCKgAAAJwKARUAAABOhYAKAAAA +p0JABQAAgFMhoAIAAMCpEFABAADgVAioAAAAcCoEVAAAADgVAioAAACcCgEVAAAAToWACgAAAKdC +QAUAAIBTIaACAADAqRBQAQAA4FQIqAAAAHAqBFQAAAA4FQIqAAAAnAoBFQAAAE6FgAoAAACnQkAF +AACAU6lQ1h2AdXR8ZXWJ1tv0Tm+Te2I90/VUidZ7TX8zuSfO4eMn25dovR6fbzG5J85h3kf7S7Re +VM8wk3sCK2s+eHCJ1tu3YIHJPUF5wBFUOI3w8HBFRkbafxYtWuTwGkuXLi3xum3atLnrei1btrzr +bThC/n2bmJhoby9p/6y0LyTpo48+Uq9evdS7d2/17t1bX375pX1Zedwnea+PXr166dlnn9WBAwfK +uksO5yz7WuJzqLy/zkr6eTx16lQlJyeX288rjqDCabi7uysuLs7UGsuWLdOLL75oag1nVBr71pX8 +/ve/V8+ePSVJx48f1+DBg7Vp06Yy7lXZyf/6+Oqrr/TWW2/xejERn0Pl+3VW0s/jgwcPasyYMapf +v365/LwioMKpHT58WLGxsVq5cqVycnLUr18/TZs2Tffff78SEhL08ccfKzs7W+7u7ho/frwaNWok +Sbpw4YJiY2N16tQpubm5afTo0dq3b5+ysrIUGRmp2rVra+bMmQVqnTp1Sq+99ppyc3P12GOPFVjW +smVL7dy50/64TZs22rZtm31Zjx499I9//ENubm6aPn26ateube6OcZCqVasW2W71feHt7W3//cqV +K6pRo4b9cXndJ3maN2+uU6dO2R9fuHBBkyZN0tmzZ1WhQgW98cYbCg0N1dy5c1WjRg37H86FCxeq +UqVK6tevX7HbLup92bx5c50+fVrjx49XRkaGKleurClTpqhWrVqSbuy/F154Qdu3b1daWppeeeUV +fffdd9q1a5cuXLigV1991X5k5273dXFj5XPI8crz66w4+T97jh8/rnvvvVdubm7l9vOKU/xwGjk5 +OQVO8ScmJqpRo0Zq1aqV3nvvPc2ePVtdu3bV/fffL+nGm2rlypVavXq1Jk2apGnTptm3NWPGDDVr +1kwfffSR4uPjFRoaqiFDhqhixYqKi4sr9EdBkmbOnKkePXooLi5OdevWVXZ2don7XbduXcXFxalH +jx5FbrusGYahyMhI/elPf9Lx48ft7X/7W9HXrFp5X+RZvXq1nn76aY0aNUpTpkyxt5fnfSJJX3zx +herVq2d/PHPmTPXr109r1qxRTEyM3nrrLUlSx44dtWXL/67x3bJlizp27Pir2y7qfZnX/tRTT2nN +mjXq1q2bZsyYYX9OTk6OqlevrhUrVmjatGkaN26cgoKCtHz5ck2fPl1z5swpsO7d7OvixsrnkOOV +59dZST6Pd+/erfDwcPvj8vh5RUCF08g77ZH307VrV0nSoEGDtHfvXn377bfq37+/ff0ffvhBQ4YM +Uc+ePTVx4sQCb/S9e/fqj3/8oyTJZrPJx8fnlvX379+vJ598UpLUuXNn2Wy2Evc9//OSk5NL/LzS +kpCQoLi4OD399NOaPHnyLde38r7I07t3b61fv17Dhw8vECqKY+V9kvefw65du2rChAl69dVX7cu+ ++uorvfvuu4qMjNSbb76pS5cuSZIaNmyoCxcuKCUlRd99952qVKlS4MhOUYp7X968b/PvI5vNZl8W +EhKi3NxcdejQwf44JSWlQI272dfFjVXic8gReJ3dUJLP4z179ujxxx+3Py6Pn1ec4ofTu3Tpkq5c +uaLr168rKytLlSpVkiRNmDBBMTExeuihh5Sdna22bdvan3M7b8aSMgxDNptNOTk5ysnJcfj2zeTv +7y/pxgdPST7cbsWV98XNOnXqVO73Sd5/DnNzczV37lwtXrxYs2bNkiTl5uZq6dKl8vLyKvS89u3b +a+vWrTp//rz9j9qvuZP3pZubmzw8POyPPT095eZmzrGVXxsrn0N3j9fZDbf6PM7MzNTly5cVGBhY +aFl5+rziCCqc3pQpUzR06FB17txZc+fOtbdfuXJF1atXlyStW7dOhmHYlz366KP65JNPJN14I2Zk +ZEiSPDw8lJWVVWSdsLAw+4Xnn3/+eYHt1axZU4cPH5Ykbdq0qdAbOv/zwsKcayqftLQ0+1h27dql +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 +kTqAQlK5AAAAAElFTkSuQmCC +" /> +<br /><br /><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAETCAYAAAD6XfR3AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nO3deVwUV7738W+DQIviiOISFTVjIiBm5EazDPdqXKPG0Um8cSMxZtExiSvRcVCzCDoxah4d +l3sTRXGbARPH0UhMXOMSo9GYO64EvYlbMm64oLIEhK7nDx/6EQFB0wXdxef9evF60aeq63fOsbv4 +WafOKZthGIYAAAAAN+FV0RUAAAAAbkWCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3 +QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdC +ggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KC +CgAAALdCggoAAAC3UqWiKwDreHLMijLtt/H/9De5JtYzXb8v037j9InJNXEPK7t2LtN+fTZsNrkm +7mHex/vLtN/wvhEm1wRW1mbo0DLtt2/+fJNrgsqAK6hwG5GRkYqKinL+xMfHuzxGQkJCmfdt3779 +L47Xtm3bX3wMV7i1b9etW+csL2v9rNQXkvTxxx+rX79+6t+/v/r376+vvvrKua0y9knB56Nfv356 +7rnndOjQoYquksu5S19LnIcq++esrOfjd999VwcOHKi05yuuoMJteHt7KzEx0dQYixcv1ssvv2xq +DHdUHn3rSX73u9+pb9++kqQTJ05o6NCh2rhxYwXXquLc+vnYu3evpk6dyufFRJyHKvfnrKzn48OH +DysmJkYPPvhgpTxfkaDCraWkpCguLk7Lli1Tfn6+Bg4cqGnTpqlZs2ZKTk7WypUrlZubK29vb02c +OFEtWrSQJF2+fFlxcXE6c+aMvLy8NHbsWO3bt085OTmKiopSgwYN9P777xeKdebMGY0bN04Oh0OP +P/54oW1t27bVl19+6Xzdvn17bdu2zbmtT58++vrrr+Xl5aXp06erQYMG5naMi9SqVavYcqv3hb+/ +v/P3rKws1atXz/m6svZJgTZt2ujMmTPO15cvX9akSZN0/vx5ValSRW+++abCwsI0d+5c1atXz/mH +c8GCBapataoGDhxY4rGL+162adNGZ8+e1cSJE5WZmanq1atrypQpuu+++yTd7L+XXnpJ27dvV3p6 +usaMGaNjx45p586dunz5sv74xz86r+z80r4uqa2ch1yvMn/OSnLruefEiRNq3LixvLy8Ku35iiF+ +uI38/PxCQ/zr1q1TixYt1K5dO/33f/+3Zs+erR49eqhZs2aSbn6pli1bphUrVmjSpEmaNm2a81gz +ZszQww8/rI8//lhJSUkKCwvTq6++Kj8/PyUmJhb5oyBJ77//vvr06aPExEQ1adJEubm5Za53kyZN +lJiYqD59+hR77IpmGIaioqL0hz/8QSdOnHCWf/JJ8fesWrkvCqxYsUJPP/203njjDU2ZMsVZXpn7 +RJK++OIL3X///c7X77//vgYOHKiPPvpIsbGxmjp1qiTpySef1ObN//8e382bN+vJJ5+847GL+14W +lP/+97/XRx99pF69emnGjBnO9+Tn56tu3bpaunSppk2bpgkTJig4OFhLlizR9OnTNWfOnEL7/pK+ +LqmtnIdcrzJ/zspyPt61a5ciIyOdryvj+YoEFW6jYNij4KdHjx6SpCFDhmjPnj367rvvNGjQIOf+ +J0+e1Kuvvqq+ffvqnXfeKfRF37Nnj5599llJks1mU7Vq1UqNv3//fnXt2lWS1L17d9lstjLX/db3 +HThwoMzvKy/JyclKTEzU008/rcmTJ5e6v5X7okD//v21Zs0ajRw5slBSURIr90nBfw579Oiht956 +S3/84x+d2/bu3atZs2YpKipKb7/9tq5evSpJCgkJ0eXLl5WWlqZjx44pICCg0JWd4pT0vby9b2/t +I5vN5twWGhoqh8OhLl26OF+npaUVivFL+rqktkqch1yBz9lNZTkf7969W7/97W+dryvj+Yohfri9 +q1evKisrS3l5ecrJyVHVqlUlSW+99ZZiY2PVqlUr5ebmqkOHDs733M2XsawMw5DNZlN+fr7y8/Nd +fnwzBQYGSrp54inLya00ntwXt+vWrVul75OC/xw6HA7NnTtXCxcu1MyZMyVJDodDCQkJstvtRd7X +uXNnbdmyRZcuXXL+UbuTe/leenl5ycfHx/na19dXXl7mXFu5U1s5D/1yfM5uKu18/PPPP+v69euq +U6dOkW2V6XzFFVS4vSlTpui1115T9+7dNXfuXGd5VlaW6tatK0lavXq1DMNwbnvsscf097//XdLN +L2JmZqYkycfHRzk5OcXGiYiIcN54vmHDhkLHq1+/vlJSUiRJGzduLPKFvvV9ERHutZRPenq6sy07 +d+5UkyZNSn2PVfuiwK33vu3YsaPQUGNJrN4n0s0/0q+99pqOHTumI0eOSJIeffRR/eMf/3Duc+sV +wieffFIbN27Uli1b1Llz6Ut/lfS9vLVv169fr1atWt1zG35JX9+prZyHXKcyf87Kcj7et2+f2rRp +43xdWc9XJKhwG7ffgzpz5kytXbtWvr6+6tatm1588UUdOXJE33zzjSRpxIgRGjJkiF544QVdu3ZN +vr6+zmMVTEbo27evoqKilJqaKknq3bu3+vfvr7FjxxaJP2bMGH300UeKiorSiRMnCh1v1KhRGj9+ +vF544QX99NNPhbZ5e3vr1KlTioqK0ooVKzRmzJhi21dRs3a//vpr9evXT3379tWiRYv05ptvlvoe +q/ZFgaVLlzr7JCkpSZMmTSr1PVbvkwK+vr4aOnSoFi1aJEkaN26c9u7dq759+6pv3776/PPPnfv+ ++te/VmZmpurXr19oskZJbSnpezl27FitWbNG/fr105o1a4r9fpbFL+3rktrKecj1KuvnrCzn49vv +P62s5yubcWtaDfwClXWh/ttnRJrBUxbqL4++kDxrof7y6BMW6r+pvD5/7qg82s5C/TeZ3dfPPfec +li5dqipVyv8uTHf6DnEPKlzGaomnO6noxNPduEPi6U6snnjCPVg98XQXf/vb3yq6Cm7BUldQp0+f +rlWrVmnPnj0VXRUAAADcI8vcg/rPf/5T6enphe6lAAAAgOexRIKam5ur2bNn3/MNzwAAAHAflrgH +9cMPP1Tv3r1LfOTXrcs17Nu3r7yqBQAAgHvg8QlqSkqKUlNTNXLkyBL3uTUpzcjIKI9qAQAAVArV +q1d3+TE9foh///79On78uHr27KmePXvq559/Vs+ePeVwOCq6agAAALgHlprFL5W+hhdXUAEAAFyH +K6gAAACwPMtdQS0NV1ABAABchyuoAAAAsDwSVAAAALgVElQAAAC4FRJUAAAAuBUSVAAAALgVElQA +AAC4FRJUAAAAuBUSVAAAALgVElQAAAC4FRJUAAAAuBUSVAAAALgVElQAAAC4FRJUAAAAuBUSVAAA +ALgVElQAAAC4FRJUAAAAuBUSVAAAALiVck1Qs7OzZRhGeYYEAACAhzEtQZ01a5Y+/fRTSVJ+fr6e +eeYZ+fv7q3Hjxvr222/NCgsAAAAPZ1qCOmPGDDVs2FCStGrVKu3YsUMrV65Uhw4dNGLECLPCAgAA +wMNVMevA58+fV+3atSVJycnJioqK0rPPPquIiAiFh4ebFRYAAAAezrQrqA0aNFBiYqIOHjyo5ORk +de3aVZKUl5enqlWrmhUWAAAAHs60BDUmJkYTJkxQq1atFBoaqm7dukmSNm/erDZt2pgVFgAAAB7O +Zpg4rf7EiRO6dOmSIiIiVKXKzbsJ9u7dq4CAAIWFhZkV9o4yMjIqJC4AAIAVVa9e3eXHNDVBLZCR +kSF/f395eVX8sqskqAAAAK5jRoJqWsaYl5eniRMnqnbt2goICNDx48clSXFxcVq4cKFZYQEAAODh +TEtQY2NjlZSUpHnz5slutzvLmzdvroSEBLPCAgAAwMOZlqAmJCQoPj5eAwYMkLe3t7O8devWOnTo +kFlhAQAA4OFMS1DT0tIUEhJSpNzHx0e5ublmhQUAAICHMy1Bbdq0qVJSUoqU79ixQ6GhoWaFBQAA +gIczLUEdNmyYRo8erd27d0uSzp07p8TEREVHR2v48OFmhQUAAICHM+1RpyNHjtSVK1fUqVMnZWdn +q23btrLb7YqJidGQIUPMCgsAAAAPZ/o6qFlZWTpy5IgcDofCw8NNWSvrbrAOKgAAgOt47EL97oQE +FQAAwHU8aqH+uLg4LVu2rEj5kiVLNGXKFLPCAgAAwMOZlqB++OGHatGiRZHysLAwffjhh2aFBQAA +gIczdR3UevXqFSm/7777dP78ebPCAgAAwMOZlqAGBwdr165dRcp37dql4OBgs8ICAADAw5m2zNSQ +IUP0+uuvKzs7Wx07dpQkffHFF3rjjTc0btw4s8ICAADAw5mWoP7pT3/SpUuXNHToUOejTf38/DRq +1CgSVAAAAJTI9GWmrl+/ru+++06S1KJFC9ZBBQAAsBCPXAc1Ly9PmZmZuj1MzZo1zQxbIhJUAAAA +1/GodVBTU1PVvn17Va1aVTVr1lRgYGChHwAAAKA4pt2D+vzzz8vHx0d/+9vfVLduXbPC3LVq1apV +dBUAAABwB6YN8fv5+engwYMKCQkx4/D3jCF+AAAA1/GoIf6WLVsqPT3drMMDAADAokxLUKdOnao3 +3nhDW7du1YULF3Tx4sVCPwAAAEBxTBvit9lsd9xu8uIBJWKIHwAAwHXMGOI3bZLU1q1bzTo0AAAA +LMz0dVDdDVdQAQAAXMejJkndKiMjQw6HozxCAQAAwMOZlqDm5eVp4sSJql27tgICAnT8+HFJUlxc +nBYuXGhWWAAAAHg40xLU2NhYJSUlad68ebLb7c7y5s2bKyEhwaywAAAA8HCmJagJCQmKj4/XgAED +5O3t7Sxv3bq1Dh06ZFZYAAAAeDjTEtS0tLRinyLl4+Oj3Nxcs8ICAADAw5mWoDZt2lQpKSlFynfs +2KHQ0FCzwgIAAMDDmZagDhs2TKNHj9bu3bslSefOnVNiYqKio6M1fPhws8ICAADAw5m2UP/IkSN1 +5coVderUSdnZ2Wrbtq3sdrtiYmI0ZMgQs8ICAADAw5m+UH9WVpaOHDkih8Oh8PBwUxZzvRss1A8A +AOA6ZuR2piWo6enpd9xes2ZNM8KWigQVAADAdcxIUE0b4g8MDLzj9kr2hFUAAACUkWkJ6tatWwu9 +djgcOnz4sGbPnq1JkyaZFRYAAAAezvR7UG/32Wef6S9/+Ys2btxYnmGdGOIHAABwHTOG+E1bZqok +YWFh+vLLL8s7LAAAADyEaUP8Fy9eLFKWlpamuLg4BQcHmxUWAAAAHs60BLVOnTolliclJZkVFgAA +AB6u3CZJ2Ww21ahRQy1btpSPj49ZYQEAAODhKmwd1FuV55qoTJICAABwHUutg3or1kQFAABAAdMS +1OXLl+uNN97Qiy++qPbt20u6Oey/ZMkSzZo1S40aNTIrNAAAADyYaUP8Tz31lHr37q3BgwcXKl+w +YIE+/fRTrV271oywpWKIHwAAwHXMGOI3LUH19/dXamqqGjduXKj89OnTCgsLU2ZmphlhS0WCCgAA +4DoetVC/v7+/Dh06VKT8wIED8vf3NyssAAAAPJxpCeoLL7ygV155RX/961/1448/6vTp01q+fLkG +Dx6sQYMGmRUWAAAAHs60SVLTpk3TjRs39Morryg3N1eS5Ovrq1dffVXvvfeeWWEBAADg4Uy7B7XA +tWvXlJqaKkkKDQ1VjRo1zAxXKu5BBQAAcB2PmiR1q4yMDPn7+8vLy7Q7Cu6qLgAAAHANj5oklZeX +p4kTJ6p27doKCAjQ8ePHJUlxcXFauHChWWEBAADg4UxLUGNjY5WUlKR58+bJbrc7y5s3b66EhASz +wgIAAMDDmZagJiQkKD4+XgMGDJC3t7ezvHXr1sUuPwUAAABIJiaoaWlpCgkJKVLu4+PjnNUPAAAA +3M60BLVp06ZKSUkpUr5jxw6FhoaaFRYAAAAezrQEddiwYRo9erR2794tSTp37pwSExMVHR2t4cOH +mxUWAAAAHs60hfpHjhypK1euqFOnTsrOzlbbtm1lt9sVExOjIUOGmBUWAAAAHs70dVCzsrJ05MgR +ORwOhYeHm7JW1t1gHVQAAADX8diF+gtkZ2fLbrfLZrOVV8giSFABAABcx6MW6p81a5Y+/fRTSVJ+ +fr6eeeYZ+fv7q3Hjxvr222/NCgsAAAAPZ1qCOmPGDDVs2FCStGrVKu3YsUMrV65Uhw4dNGLECLPC +AgAAwMOZNknq/Pnzql27tiQpOTlZUVFRevbZZxUREaHw8HCzwgIAAMDDmXYFtUGDBkpMTNTBgweV +nJysrl27SpLy8vJUtWpVs8ICAADAw5mWoMbExGjChAlq1aqVQkND1a1bN0nS5s2b1aZNG7PCAgAA +wMOZOov/xIkTunTpkiIiIlSlys27Cfbu3auAgACFhYWZFfaOmMUPAADgOh6/zJQ7IEEFAABwHRJU +F6hkzQUAADCVGevbmzaL311lZmZWdBUAAAAsw6MW6gcAAADuhUsTVJvNpnPnzhX5HQAAACgrlyao +Xl5e3OMJAACAX8Sl96AGBwcrOTlZffr0kSRdu3ZNdru92H1r1qzpytAAAACwCJfO4v/ggw80fPhw +ORyOUvetqCutLDMFAADgOh6xzNRPP/2k48eP64knntCqVatUq1atYvdr3769K8OWGQkqAACA63hE +guruSFABAABcx2OXmcrJyVFOTk55hAIAAICHMzVBXbx4sUJDQ2W322W32xUWFqalS5eaGRIAAAAe +zrQnSS1cuFDDhw/XqFGj9MQTT0iStm/frqFDh8rhcOill14yKzQAAAA8mGn3oIaEhGjcuHF65ZVX +CpUvXLhQ77//vlJTU80IWyruQQUAAHAdj5ok5evrq++//16NGzcuVH769Gk9+OCDFXZPKgkqAACA +63jUJKm6devqwIEDRcoPHDigevXqmRUWAAAAHs60BHXQoEEaPHiwli9frtOnT+v06dNavny5Bg8e +rBdffNGssAAAAPBwpg3x5+XladSoUYqPj9eNGzckST4+Pnr11Vc1c+ZMVali2vysO2KIHwAAwHU8 +6h7UAlevXnVOiAoLC1ONGjXMDFcqElQAAADX8cgE1d2QoAIAALiOR02SAgAAAO4FCSoAAADciikJ +6o0bN/Tpp5/q4sWLZhweAAAAFmZKglqlShX17t1bmZmZZhweAAAAFmZKgmqz2fTQQw/p5MmTZhwe +AAAAFuY9adKkSWYcODg4WOPGjVOjRo1UvXp15eTkKCsry/nj7+9vRthS5ebmVkhcAAAAK/L19XX5 +MU1bZspms91xe0WtbsUyUwAAAK5jxjJTpj3OaevWrWYdGgAAABbGQv0AAAC4Zx67UH9GRoYcDkd5 +hAIAAICHMy1BzcvL08SJE1W7dm0FBATo+PHjkqS4uDgtXLjQrLAAAADwcKYlqLGxsUpKStK8efNk +t9ud5c2bN1dCQoJZYQEAAODhTEtQExISFB8frwEDBsjb29tZ3rp1ax06dMissAAAAPBwpiWoaWlp +CgkJKVLu4+PDWqQAAAAokWkJatOmTZWSklKkfMeOHQoNDTUrLAAAADycaQnqsGHDNHr0aO3evVuS +dO7cOSUmJio6OlrDhw83KywAAAA8nGkL9Y8cOVJXrlxRp06dlJ2drbZt28putysmJkZDhgwxKywA +AAA8nOkL9WdlZenIkSNyOBwKDw83ZTHXu8FC/QAAAK5jRm5XLk+SysnJkST5+fmZHapUJKgAAACu +43FPklq0aJHCwsJkt9tlt9sVFhamxYsXmxkSAAAAHs60BHXOnDkaPny4fv/732vdunVat26devXq +pddee03z5s0zKywAAAA8nGlD/I0bN9akSZP08ssvFypfuHChJk+erFOnTpkRtlQM8QMAALiOR92D +arfbdezYMTVu3LhQ+enTp9W8eXP9/PPPZoQtFQkqAACA63jUPagRERHFPtL0wIEDevjhh80KCwAA +AA/n0nVQL1686Pw9Li5Ow4cP15UrV/TEE0/IMAxt375dcXFx+uCDD1wZFgAAABbi0iF+m81W5n3L +YXWrYjHEDwAA4DpmDPG79Arq1q1bXXk4AAAAVELlslC/O+EKKgAAgOu4/RXU4uTn5ysjI6PIkH7N +mjXNDg0AAAAPZNos/mPHjqlTp06y2+2qWbOmAgMDC/0AAAAAxTHtCmpUVJSqVq2qpKQkBQUFmRUG +AAAAFmPaPah+fn46dOiQmjdvbsbh71klu+UWAADAVHezilNZmXYFtWXLlkpPTzfr8PcsMzOzoqsA +AABgGR71qNOvv/5a48ePV1xcnMLDw+XlVfh214qaJPXkmBVFyv4R+7sS9+/9zqd3tT8AAEBl4lGz ++IOCgnT9+nW1a9eu2O0MtQMAAKA4pk+SWrlyJZOkAAAAUGamJagHDx7UwYMH3W6SFAAAANybaeug +tmjRQleuXDHr8AAAALAo0xLUd999V9HR0dq6dasuXLigixcvFvoBAAAAimPaEH/37t0lSR07dix2 +O5OkAAAAUBzTEtStW7eadWgAAABYmGkJavv27c06NAAAACzMtAS1tKdIVdRC/QAAAHBvpiWogYGB +d9zOPagAAAAoTrndg+pwOHT48GHNnj1bkyZNMissAAAAPFy53oPasWNHPfDAA/rLX/6igQMHmhUa +AAAAHsy0dVBLEhYWpi+//LK8wwIAAMBDmHYFtbjF+NPS0hQXF6fg4GCzwgIAAMDDmZag1qlTp8Ty +pKQks8ICAADAw5XbJCmbzaYaNWqoZcuW8vHxMSssAAAAPJzLE9SC9U8jIiKK3Z6ZmSmJdVABAABQ +PJcnqKWtf1qAdVABAABQHJcnqLcP7RcwDEOrV69WfHy8/P39XR0WAAAAFuHyBPX29U8Nw9CaNWsU +Gxur06dPa8KECRo1apSrwwIAAMAiTJskdXtiGh0drVGjRqlGjRpmhQQAAIAFuDxBNQxDn3zyiWJj +Y3Xq1CmNHj1ao0ePJjEFAABAmbg8QX344YeVmpqqIUOGaNWqVapRo4Zyc3OLLNwfFBTk6tAAAACw +AJcnqPv375ckzZ07V3Pnzi1xP2bxAwAAoDjlNosfAAAAKAvTZ/EDAAAAd8OroisAAAAA3IoEFQAA +AG6FBBUAAABuhQQVAAAAboUEFQAAAG6FBBUAAABuhQQVAAAAboUEFQAAAG6FBBUAAABuhQQVAAAA +boUEFQAAAG6FBBUAAABuhQQVAAAAboUEFQAAAG6FBBUAAABuhQQVAAAAboUEFQAAAG6FBBUAAABu +hQQVAAAAbqVKRVfAla5fv67x48fr4sWLqlOnjt577z1Vq1atoqsFAACAu2CpK6gLFy7Uo48+qhUr +VuiRRx7RokWLKrpKAAAAuEuWSlB37dqlbt26SZKeeuop7dy5U5LUpk0b5w8AAADcm6WG+C9cuKA6 +depIkoKCgnTx4kVJ0r59+5z7PDlmRYXUDQAAAGVkWEi7du0Mh8PhfN2hQ4di92vdujXllFNOOeWU +U0455S4sdyVLJaj/+Z//aZw/f94wDMNIS0sz+vTpUyH1KI9/OOISl7jEJS5xiUtcq7LUPaiRkZFa +v369JOmzzz5TZGRkBdcIAAAAd8tmGIZR0ZVwlWvXrikmJkaXLl1SUFCQ3nvvPQUEBFR0tQAAAHAX +LJWgAgAAwPNZaogfAAAAns9Sy0xVRvPnz1dycrLS0tK0Z8+eQtus9mStffv2aebMmcrPz5eXl5di +YmLUqlUrSdZra4GPP/5Yq1atks1mkySNGDFC//7v/y7Jum2WpOnTp2vVqlWFPtNWbG9kZKSaNm0q +SXruuefUo0cPSdZsa4H58+dry5YtMgxDffr0Ud++fSVZt80zZ850LnX4888/68qVK9q6dasl27t9 ++3b913/9lyTJZrNp2LBhateunSRr/vsePXpUsbGxysvLU3BwsCZPnix/f39J1mxvuavQKVr4xQ4d +OmRcuHDB+I//+I8i22bOnGksXbrUMAzDWLp0qTF79uzyrp5Lff/998alS5cMwzCMb7/91njmmWec +26zW1gKZmZnO348fP2506dLF+dqqbf6f//kfY/z48UU+01Zsb3HfW8OwZlsNwzDWrFljvPPOO0Z+ +fr5hGIZx5coV5zartvlWK1asMGJjYw3DsGZ7u3TpYvzwww+GYRjGyZMnja5duzq3WbG9zz//vLFz +507DMAzjq6++MubMmePcZsX2ljeG+D1cy5YtnQ8nuF1JT9byVM2aNVOtWrUkSQ899JAuXbrk3Ga1 +thYo+N+4JGVlZalevXrO11Zsc25urmbPnq2xY8cW2WbF9pbEqm1dvXq1XnrpJXl53fzTU7NmTec2 +q7b5Vhs2bHC20YrtbdSokTIyMiTdvILYoEED5zYrtvfUqVN67LHHJEmPP/54oTZZsb3ljSF+Cyvp +yVpWsHbtWudQt2Tttq5YsUIrVqxQdna2FixY4Cy3Yps//PBD9e7d2/kfkVtZsb2GYSgqKkrVq1fX ++PHjdf/990uyZlulm3/QP//8c23btk2BgYGaMGGCgoODJVm3zQXOnDmjM2fOOB+5bcX2TpkyRYMH +D5bNZpNhGIqPj3dus2J7mzVrpk2bNql79+7atGmTzp0759xmxfaWN66gwuMcPXpUy5cvV3R0dEVX +pVz0799fa9as0ciRIzVt2rSKro5pUlJSlJqaql69elV0VcpNcnKyEhMT9fTTT2vy5MkVXR3T5efn +q0mTJlqxYoWeeeYZxcXFVXSVys3GjRvVuXNn59VjK5o+fbpGjhypdevWafTo0ZoxY0ZFV8lUb731 +llavXq1+/frp+++/l7e3d0VXyVKs+02B6tSpo7S0NEnSxYsXFRQUVME1+uXOnz+v8ePHa+rUqYVu +bbBiW2/XrVs3HT582Pnaam3ev3+/jh8/rp49e6pnz576+eef1bNnTzkcDnoIp6gAAAm7SURBVEnW +a68kBQYGSpK6du2qH374wVluxbZKUv369dWlSxdJUufOnfW///u/zm1WbXOBW4f3JWu295///Kc6 +d+4s6ea/74EDB5zbrNjeX//611qwYIE++ugj9erVS40bN3Zus2J7yxsJqoVZ7clamZmZio6O1ujR +oxUWFlZom9XaWuDMmTPO33fs2OEcApas1+aoqCitX79eycnJSk5Olt1uV3JysvOKk9Xam56eLuP/ +LUO9c+dONWnSxLnNam0tEBkZqb1790q6uSrHrX/QrdpmSTp+/LiysrLUsmVLZ5kV29uoUSPnv++e +PXvUsGFD5zYrtvfq1auSbt6qs3jxYvXs2dO5zYrtLW8s1O/h5s2bp88++0xpaWmqU6eOnnrqKQ0f +PlyS9Z6stXz5ci1YsMB5z5ok/fWvf5WXl5fl2lpg6tSp2r9/vwzDUM2aNQvdp2jVNhdo27atvvzy +S+drq7V3/fr1SkhIkCTZ7Xa9+eabat68uSTrtbVARkaG3nrrLf3rX/+Sj4+P3nnnHcu3WZI++OAD +GYah119/3VlmxfYeOXJEf/7zn5WbmytfX19NnDhR4eHhkqzZ3r///e9KSkqSt7e32rVrp2HDhjmX +BLRie8sbCSoAAADcCkP8AAAAcCskqAAAAHArJKgAAABwKySoAAAAcCskqAAAAHArJKgAKpVt27bJ +ZrO55aMHFyxYoPvvv1/e3t7O5WrKoqBN6enpLq3P7X3lzn0HwFpIUAGUq4Ik59/+7d906yp3ZiVZ +nuJf//qXXnvtNf3pT3/Sjz/+qLNnz1Z0lYqIjIzU2bNnVbt2bZccr7L/mwMoGQkqgAqRmpqqTz75 +pKKr4XJ5eXn39L4ffvhBDodD/fr1U4MGDVS/fn0X1+yX8/X1Vf369e/q6i4A3AsSVAAVYsiQIYqN +jVVxzwopbij59qttBa83bNigNm3ayG636/HHH9cPP/ygPXv26JFHHpHdbtcjjzxS6JnvBfbv36/I +yEjZ7XY1adJE8+bNK7LPnDlzFBISIl9fXzVq1Ehvv/228vPzi9Tp888/16OPPipfX1/n4w1vlZeX +pzfffFPBwcHy9fVVSEiIFi1aVGifJ554QpJUq1Yt2Wy2EpPAvLw8jR07VnXq1FG1atXUq1cv/fTT +T/fUd5s3by61D251+7EdDoemT5+uBx54QL6+vmrQoIHi4uKc+y9dulQRERHy8/NTYGCgnn/++UJX +Szt06CBJCgwMLLbNpfX//Pnz1bhxY1WpUkUNGzbUrFmz7lh/AB7EAIBytHXrVkOS8f333xuBgYHG +6tWrC5VfuXLF+XtaWlqR9125cqXQ68cff9zYtWuXkZqaakRGRhqtW7c22rdvb3z99dfOsk6dOhU5 +zgMPPGCsXbvWOHXqlBEfH2/4+fkZCQkJzv3eeecdIyQkxPjss8+MH3/80di0aZPRtGlTY8KECUWO +FRERYWzbts04efJkoToXeP311406dercMd6qVasMScbRo0eNs2fPGmfPni22/0aOHGnUrVvXeaz5 +8+cbQUFB99R3pfXB7ce6/fW4ceOMwMBAIykpyTh9+rTxzTffGEuWLHG+f9myZcaWLVuM06dPG9u2 +bTNatmxpPP/882Vqc2n9f+LECcNmsxlTp041Tp48aXzzzTfG2rVri+0zAJ6HBBVAubo1yYmNjTUi +IiIMh8Nxzwnqli1bnPt8/PHHhiRjx44dhcqqVKli5OXlFXrfsmXLCtVr3LhxRmhoqGEYhpGZmWlU +rVrV2LVrV6F9EhMTjVq1ahWp050So/T0dMPHx6fYeCEhISW2rzhXr141fH19ixxr7Nix99R3d+qD +W/crLkG9du2a4efnZyxevLjE+t5u9erVRrVq1QyHw3HHNpel/7/55htDknHgwIEyxwfgORjiB1Bh +Ro0apVOnTmnNmjX3fIyWLVs6f69Tp44kKTw8vFBZXl6eMjIyCr2vYEj91tepqanKycnRkSNHlJ2d +rS5duqh69erOn5dfflmXL18ucqzWrVuXWL/U1FTduHGj2HhHjx5VTk5Omduampqq3NzcIscqGCq/ +W3fqg9J89913ysnJUceOHUvc56uvvlLnzp1Vt25dBQQEaMCAAcrMzCzSf7crS/9HRETokUceUbt2 +7TRw4ECtXLmy0PA/AM9WpaIrAKDy+tWvfqXo6GjFxcVp5syZzvLi7r90OBzFHsPLq+j/s4srM267 +1/VOE30KYq1fv77YyUr+/v6FXvv6+pZ4LDPcqe5303dmTnZKT09X9+7d1bt3b02ePFlBQUHavXu3 +Bg0aVGoiWZb+9/Ly0ldffaUNGzZo/fr1Gjp0qBITE7V69WpT2gOgfHEFFUCFKu4qao0aNSSp0ESf +w4cPuzTu9u3bC73esWOHQkND5efnp/DwcNntdp0+fVoPPPBAkZ/iEuCShIWFycfHp0i87du3O+OV +VWhoqHx9fYsca9u2bc7f76bv7tQHpQkLC5Ofn5+++OKLYrenpKTo+vXrmjx5sn7729/qwQcf1IUL +Fwrt4+3tLaloAl3W/vfx8dHvfvc7zZs3T/Pnz9eaNWuUnZ1dat0BuD+uoAKoUDVq1FB0dLTeffdd +Z1l4eLiCgoI0efJk/fnPf1ZqaqrmzJnj0rhxcXEKDAzUb37zG23atEmzZ892zmKvXr26YmJiNGLE +COXn56tdu3a6ceOGvv32Wx09elRvv/32XbXvD3/4g8aOHavAwEC1atVKGzdu1OzZs/XBBx/cVZ1v +P9ZDDz2kTZs2acmSJc597qbv7tQHpQkICNCoUaM0ZswYVa1aVZGRkTp//ryOHDmiQYMGqWnTpvL2 +9tbcuXP1+uuva//+/UXq0aRJE0nS2rVr1aNHD9lsNgUFBZWp//fu3au9e/eqc+fOqlKlipKTk9Ww +YUPZ7fa76lMAbqqib4IFULkUN4nn6tWrRmBgYKEJMxs2bDCaNWtm+Pn5GR07djSWLVtW7ESfO00G +Kq6s4PWGDRuMxx57zPDz8zOCg4ON2bNnF6nr/Pnzjd/85jeGr6+vUa1aNePRRx814uPj79iW4ty4 +ccOYMGGC0bBhQ8PHx8do3rx5oeOUVPfi5ObmGtHR0Ubt2rWNqlWrGt27dzeWL19+T31XWh+UNos/ +Pz/fePfdd42mTZsa3t7eRsOGDY3Jkyc7379o0SLjvvvuM+x2u9GpUydjyZIlRdo4ZcoU47777jO8 +vLyM2/8k3an/U1JSjA4dOhgBAQGGj4+P8dhjjxl79uy5Y98B8Bw2wyhmEUIAgGVt27ZNHTp0UFpa +moKCgiq6OgBQBPegAgAAwK2QoAIAAMCtMMQPAAAAt/J/AdE9lnVJERG9AAAAAElFTkSuQmCC +" /> +<br /><br /><img border="0" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqgAAAETCAYAAAD6XfR3AAAABmJLR0QA/wD/AP+gvaeTAAAgAElE +QVR4nO3de1xVVf7/8fcBuYjIgEKaSVpmiprxKKfm6zevKXkJK2e8RJlddNSRENIpzTQBu3j5Wd4q +b3jri2hjOaEzahe8ZaNjk+QlbSYtaxwRFDRQRGH//vDL+UJAkp0F52xfz8eDx+OctfbZn7U2Z28+ +7L322g7LsiwBAAAAbsKrthsAAAAAlEWCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3 +QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdC +ggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KCCgAAALdCggoAAAC3QoIKAAAAt0KC +CgAAALdCggoAAAC3Uqe2GwD7iBqbVq3lNv+/wYZbYj/T9UC1lntWfzbcEvfwzn09qrXcgE0fGm6J +e5i3Zm+1losdGGm4JbCzDiNGVGu5PQsWGG4JrgWcQYXb6Nixo2JiYpw/ixYtcnmMlJSUai/btWvX +XxyvU6dOv3gdrlB2227YsMFZXt322WlbSNKaNWs0aNAgDR48WIMHD9Ynn3zirLsWt0np92PQoEF6 +5JFHtG/fvtpuksu5y7aWOA5d69+z6h6PX375ZWVmZl6zxyvOoMJteHt7KzU11WiMpUuX6sknnzQa +wx3VxLb1JPfff78GDhwoSTp69KhGjBihzZs313Krak/Z78fu3bv1yiuv8H0xiOPQtf09q+7xeP/+ +/Ro/frxatmx5TR6vSFDh1g4ePKikpCStWLFCxcXFGjJkiKZNm6YWLVooPT1d77zzjoqKiuTt7a2J +EyeqTZs2kqTTp08rKSlJx48fl5eXl8aNG6c9e/bowoULiomJUZMmTTRz5sxysY4fP65nn31WJSUl ++s1vflOurlOnTtq+fbvzfdeuXbVlyxZn3YABA/S3v/1NXl5emj59upo0aWJ2w7hIgwYNKi23+7YI +CAhwvj537pwaNWrkfH+tbpNSHTp00PHjx53vT58+rSlTpigrK0t16tTRCy+8oIiICM2dO1eNGjVy +/uFcuHCh6tatqyFDhlS57sr2yw4dOug///mPJk6cqIKCAgUGBmrq1Km6/vrrJV3efk888YS2bt2q +vLw8jR07Vl999ZV27Nih06dP649//KPzzM4v3dZV9ZXjkOtdy9+zqpQ99hw9elQ33nijvLy8rtnj +FZf44TaKi4vLXeLfsGGD2rRpo86dO+uNN97Q7Nmz1bdvX7Vo0ULS5Z1qxYoVSktL05QpUzRt2jTn +umbMmKE77rhDa9as0apVqxQREaGRI0fKz89PqampFf4oSNLMmTM1YMAApaamqlmzZioqKqp2u5s1 +a6bU1FQNGDCg0nXXNsuyFBMTo9///vc6evSos/zPf658zKqdt0WptLQ0Pfjgg3rmmWc0depUZ/m1 +vE0k6eOPP9ZNN93kfD9z5kwNGTJEq1evVmJiol555RVJUlRUlD788P/G+H744YeKior6yXVXtl+W +lj/wwANavXq1+vXrpxkzZjg/U1xcrOuuu07Lly/XtGnT9Pzzzys8PFzLli3T9OnTNWfOnHLL/pJt +XVVfOQ653rX8PavO8Xjnzp3q2LGj8/21eLwiQYXbKL3sUfrTt29fSdLw4cO1a9cuffnllxo6dKhz ++W+++UYjR47UwIED9eKLL5bb0Xft2qXf/e53kiSHw6F69epdMf7evXt13333SZJ69+4th8NR7baX +/VxmZma1P1dT0tPTlZqaqgcffFDJyclXXN7O26LU4MGDtW7dOsXFxZVLKqpi521S+s9h3759NWnS +JP3xj3901u3evVuvvfaaYmJiNHnyZJ05c0aS1KpVK50+fVrZ2dn66quvVL9+/XJndipT1X75421b +dhs5HA5nXevWrVVSUqKePXs632dnZ5eL8Uu2dVV9lTgOuQLfs8uqczz+9NNP9V//9V/O99fi8YpL +/HB7Z86c0blz53Tp0iVduHBBdevWlSRNmjRJiYmJuv3221VUVKRu3bo5P/NzdsbqsixLDodDxcXF +Ki4udvn6TQoJCZF0+cBTnYPblXjytvixXr16XfPbpPSfw5KSEs2dO1eLFy/WrFmzJEklJSVKSUmR +v79/hc/16NFDH330kU6dOuX8o/ZTrma/9PLyko+Pj/O9r6+vvLzMnFv5qb5yHPrl+J5ddqXjcWFh +oX744QeFhYVVqLuWjlecQYXbmzp1qkaNGqXevXtr7ty5zvJz587puuuukyS99957sizLWXf33Xfr +T3/6k6TLO2JBQYEkycfHRxcuXKg0TmRkpHPg+aZNm8qtr3Hjxjp48KAkafPmzRV26LKfi4x0r6l8 +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 +p2vt2rXlvtN27G/Hjh3VvHlzSdIjjzyivn37SrJnX0stWLBAH330kSzL0oABAzRw4EBJ9u3zrFmz +nFMdFhYWKjc3VxkZGbbs79atWzV//nxJksPh0OjRo9W5c2dJ9vz9Hj58WImJibp06ZLCw8OVnJys +gIAASfbsb42r1Vu08Ivt27fPOnnypHXPPfdUqJs1a5a1fPlyy7Isa/ny5dbs2bNrunku9a9//cs6 +deqUZVmW9dlnn1kPPfSQs85ufS1VUFDgfH3kyBGrZ8+ezvd27fM//vEPa8KECRW+03bsb2X7rWXZ +s6+WZVnr1q2zXnzxRau4uNiyLMvKzc111tm1z2WlpaVZiYmJlmXZs789e/a0vv76a8uyLOubb76x +7rvvPmedHfv76KOPWjt27LAsy7I++eQTa86cOc46O/a3pnGJ38O1a9fO+XCCH6vqyVqeqkWLFmrQ +oIEk6bbbbtOpU6ecdXbra6nS/8Yl6dy5c2rUqJHzvR37XFRUpNmzZ2vcuHEV6uzY36rYta/vvfee +nnjiCXl5Xf7TExwc7Kyza5/L2rRpk7OPduxv06ZNlZ+fL+nyGcQmTZo46+zY32+//VZ33323JOk3 +v/lNuT7Zsb81jUv8NlbVk7Xs4P3333de6pbs3de0tDSlpaXp/PnzWrhwobPcjn1+66231L9/f+c/ +ImXZsb+WZSkmJkaBgYGaMGGCbrrpJkn27Kt0+Q/6X//6V23ZskUhISF6/vnnFR4eLsm+fS51/Phx +HT9+3PnIbTv2d+rUqRo2bJgcDocsy9KiRYucdXbsb4sWLfTBBx+od+/e+uCDD3TixAlnnR37W9M4 +gwqPc/jwYa1cuVIJCQm13ZQaMXjwYK1bt05xcXGaNm1abTfHmIMHD+rQoUPq169fbTelxqSnpys1 +NVUPPvigkpOTa7s5xhUXF6tZs2ZKS0vTQw89pKSkpNpuUo3ZvHmzevTo4Tx7bEfTp09XXFycNmzY +oPj4eM2YMaO2m2TUpEmT9N5772nQoEH617/+JW9v79pukq3Yd0+BwsLClJ2dLUnKyclRaGhoLbfo +l8vKytKECRP0yiuvlBvaYMe+/livXr20f/9+53u79Xnv3r06cuSIoqOjFR0drcLCQkVHR6ukpESS +/forSSEhIZKk++67T19//bWz3I59laTGjRurZ8+ekqQePXron//8p7POrn0uVfbyvmTP/n7++efq +0aOHpMu/38zMTGedHft78803a+HChVq9erX69eunG2+80Vlnx/7WNBJUG41LhzkAAAY3SURBVLPb +k7UKCgqUkJCg+Ph4RURElKuzW19LHT9+3Pl627ZtzkvAkv36HBMTo40bNyo9PV3p6eny9/dXenq6 +84yT3fqbl5cn63+nod6xY4eaNWvmrLNbX0t17NhRu3fvlnR5Vo6yf9Dt2mdJOnLkiM6dO6d27do5 +y+zY36ZNmzp/v7t27dINN9zgrLNjf8+cOSPp8lCdpUuXKjo62llnx/7WNCbq93Dz5s3TX/7yF2Vn +ZyssLEx9+vRRbGysJPs9WWvlypVauHChc8yaJL399tvy8vKyXV9LvfLKK9q7d68sy1JwcHC5cYp2 +7XOpTp06afv27c73duvvxo0blZKSIkny9/fXCy+8oFtvvVWS/fpaKj8/X5MmTdK///1v+fj46MUX +X7R9nyXpzTfflGVZ+sMf/uAss2N/Dxw4oJdeeklFRUXy9fXVxIkT1bZtW0n27O+f/vQnrVq1St7e +3urcubNGjx7tnBLQjv2taSSoAAAAcCtc4gcAAIBbIUEFAACAWyFBBQAAgFshQQUAAIBbIUEFAACA +WyFBBQAAgFshQQWAH/n66681cOBAhYWFqU6dOgoNDVWXLl2cE28DAMyqU9sNAAB3UlhYqK5du+q2 +227T+vXr1bRpU2VnZ2vbtm3Kzc2t7eYBwDWBM6gAUMbevXv1/fff64033tDdd9+tG264QZGRkYqL +i9PDDz9cbtk5c+aoVatW8vX1VdOmTTV58mQVFxc76y9duqRx48YpLCxM9erVU79+/fT222/L4XAo +Ly9PW7ZskcPhUE5OjvMzpWV5eXnVjlP6mc2bN+vOO++Un5+ffv3rX+vw4cPOZUpKSjR9+nTdcsst +8vX1VZMmTZSUlPSz+gMANYUEFQDKuP766+VwOLR69WpdunSpyuWmTJmiN954Q6+//rqOHDmiZcuW +aeXKlZo8ebJzmbFjx2rlypVKSUnRl19+qfvvv18JCQk/qz3ViVMqMTFR8+fPV2ZmpurUqaORI0c6 +6yZMmKBXX31VU6dO1ddff633339fzZo1u6o4AGCcBQAoZ/bs2VZAQIAVGBho3XPPPdbYsWOtv//9 +7876goICq27dutbOnTvLfS41NdVq0KCBZVmWdebMGcvX19dasWJFuWXGjRtnSbJyc3OtjIwMS5KV +nZ3trC8ty83NrVacsp/5+OOPnWWrV6+26tSpY128eNE6e/as5efnZy1durTS/lY3DgDUFMagAsCP +xMXF6YknntC2bdv0+eefa+vWrZo1a5ZmzZql+Ph4HThwQOfPn1fPnj3Lfa64uFiFhYXKz8/XoUOH +VFRUpC5dupRbplu3bpo5c2a12lGdOIGBgc7ytm3bOl9fd911unTpkgoKCnT48GFduHBB3bt3d0kc +ADCNBBUAKlG/fn317dtXffv21QsvvKDk5GRNmjRJcXFxKikpkSRt3LhRjRs3rvDZgIAA52uHw1Fl +jMrqStdd9nV14kiSl1fFUVuWZVUZ/2rjAIBpJKgAUA3t27dXQUGBLl68qLZt28rf31/Hjh3TPffc +U+nyrVu3lq+vr7Zu3apHH33UWb5lyxbn66CgIElSTk6OQkNDJUn79+931lcnTnVERETIz89PH3/8 +sR5//PEK9a6KAwCuQoIKAGV88sknmjdvngYMGKD27dvLz89PX3zxhZ577jn17t1bfn5+8vPz0/jx +4/X000+ruLhYnTt31sWLF/XZZ5/p8OHDmjx5soKCgvT73/9e48aNU0hIiG677TZ98MEHWrZsmTNW +27ZtFRoaquTkZL300ks6dOiQ5syZ46wPDAy8YpzqqF+/vsaMGaOxY8eqbt266tixo7KysnTgwAEN +HTrUZXEAwGVqexAsALiT48ePWyNHjrQiIiIsPz8/y8fHx7rpppus+Ph468yZM+WWXbBggdW+fXvL +19fXqlevnnXXXXdZixYtctYXFRVZCQkJVsOGDa26detavXv3tlauXOm8CcqyLGvTpk1WixYtLD8/ +P6t79+7WihUrytVXJ86VbrayLMsqLi62Xn75Zat58+aWt7e3dcMNN1jJyck/qz8AUFMcllWNAUoA +AJfYsmWLunXrptzcXAUHB9d2cwDALTEPKgAAANwKCSoAAADcCpf4AQAA4Fb+PxBIwxXSTjyiAAAA +AElFTkSuQmCC +" /> +</div><hr><div class="info-header"><span class="info-header-title">Sequence Complexity</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"></td><td class="info-table-value">Value</td><td class="info-table-value">Sequence</td></tr><tr><td class="info-table-type">Minimum DUST score:</td><td class="info-table-value">2</td><td class="info-table-value sequencetext">NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTG<br />AGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC</td></tr><tr><td class="info-table-type">Maximum DUST score:</td><td class="info-table-value">100</td><td class="info-table-value sequencetext">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td></tr><tr><td class="info-table-type">Minimum Entropy value:</td><td class="info-table-value">0</td><td class="info-table-value sequencetext">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td></tr><tr><td class="info-table-type">Maximum Entropy value:</td><td class="info-table-value">81</td><td class="info-table-value sequencetext">NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTG<br />AGAAGAGGCGTGGAGGAGATGACACACCCCGTGTGTTCTC</td></tr> </tbody></table><br /><img border="0" src="data:image/png;base64,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 +D6K8nDlzRuPHj9fJkycVHh6uqVOnqlq1apU9LAAAAJQDRwVXAAAAOJejlgoAAADAuRy1HRb+z7x5 +85SSkqL09HRt2bKlwDGn3WHsu+++0+uvv67Lly/Lx8dH48eP15133inJeXPN9+GHHyo5OVkul0uS +NHLkSN1zzz2SnDtnSXrttdeUnJxc4Jx24nzbtWunBg0aSJL+/d//XX369JHkzLnmmzdvntatWydj +jB5++GE98sgjkpw759dff92zVeP58+eVmZmp1NRUR85348aNmjNnjiTJ5XJp+PDh6tChgyRnvr77 +9u1TQkKCcnNzFRkZqaSkJAUFBUly5nwrXKV+NAzW7Nq1y5w4ccLce++9hY69/vrr5t133zXGGPPu +u++aWbNmVfTwytXPP/9sTp48aYwxZtu2beaBBx7wHHPaXPNlZ2d7vt+/f7/p3r2752enzvn77783 +zz//fKFz2onzLerv1hhnztUYYz7++GPz4osvmsuXLxtjjMnMzPQcc+qcr7R8+XKTkJBgjHHmfLt3 +725++eUXY4wxBw4cMD169PAcc+J8Bw4caL766itjjDFff/21eeONNzzHnDjfisZSAYdq3ry552YM +VyvuDmPeqlGjRqpRo4Yk6Y477tDJkyc9x5w213z5/3qXpHPnzumWW27x/OzEOV+8eFGzZs3S2LFj +Cx1z4nyL49S5rlixQk888YR8fH57SwoNDfUcc+qcr7RmzRrPHJ0433r16nlu/nP27FnVqVPHc8yJ +8z148KDatm0rSbr77rsLzMmJ861oLBW4CRV3hzEnWLlypee/zCVnz3X58uVavny5cnJy9Pbbb3va +nTjnt956Sw8++KDnHyhXcuJ8jTEaMGCAgoOD9fzzz6thw4aSnDlX6bc3+s8++0wbNmxQWFiYJkyY +oMjISEnOnXO+I0eO6MiRI55bkjtxvi+//LIGDx4sl8slY4zmz5/vOebE+TZq1Ehr165Vr169tHbt +Wh07dsxzzInzrWhccYVj7Nu3T0uWLNGYMWMqeygV4s9//rM+/vhjxcfHa9q0aZU9HGv27NmjvXv3 +ql+/fpU9lAqTkpKipUuX6o9//KOSkpIqezjWXb58WfXr19fy5cv1wAMPKDExsbKHVGE+//xzdevW +zXO12Ylee+01xcfH65NPPtHo0aM1ffr0yh6SVZMnT9aKFSv0b//2b/r555/l6+tb2UNyFOf+paBY +ERERSk9PlyRlZGQoPDy8kkd0/Y4fP67nn39er776aoElEk6c69V69uypH374wfOz0+a8fft27d+/ +X3379lXfvn11/vx59e3bV3l5eZKcN19JCgsLkyT16NFDv/zyi6fdiXOVpFtvvVXdu3eXJHXr1k0/ +/fST55hT55zvymUCkjPn+49//EPdunWT9Nvru2PHDs8xJ8739ttv19tvv60PPvhA/fr102233eY5 +5sT5VjSC603IaXcYy87O1pgxYzR69GjFxMQUOOa0ueY7cuSI5/u0tDTPfyVLzpvzgAEDtHr1aqWk +pCglJUVut1spKSmeK1ROm++pU6dk/v/22l999ZXq16/vOea0ueZr166dtm7dKum3XUKufKN36pwl +af/+/Tp37pyaN2/uaXPifOvVq+d5fbds2aK6det6jjlxvqdPn5b025Kfd955R3379vUcc+J8Kxo3 +IHCo2bNn69NPP1V6eroiIiLUu3dvjRgxQpLz7jC2ZMkSvf322541cZL0/vvvy8fHx3Fzzffqq69q ++/btMsYoNDS0wDpIp845X/v27fXll196fnbafFevXq1FixZJktxutyZNmqSmTZtKct5c82VlZWny +5Mn65z//KX9/f7344ouOn7MkzZ07V8YYDRs2zNPmxPnu3r1br7zyii5evKiAgABNnDhRsbGxkpw5 +37/97W9atmyZfH191aFDBw0fPtyzdaET51vRCK4AAADwCiwVAAAAgFcguAIAAMArEFwBAADgFQiu +AAAA8AoEVwAAAHgFgisAOMCGDRvkcrnK9RaSNvq8UlJSkgYOHGilbxTWsmVL/e1vf6vsYQDXheAK +WJT/xh8SEqJz584VOPbjjz/K5XLJ5XLp1KlTlTRCoHjt2rXT0aNHVbNmTUn/dz6Xx/n6r3/9SzNm +zNCkSZM8bfn9u1wu+fj4KDQ0VG3atFFSUpLOnj1b6HFXB+qrx/fLL7/okUceUUREhPz8/BQeHq6O +HTt6NoDPr3WtLyeZMGGCJk+eLHbBhDcjuAIVIDQ0VB999FGBtoULFxa4QxBwowkICNCtt95qJcAt +XLhQsbGxio6OLnRs9+7dOnLkiLZu3apnnnlGK1as0F133eW5VWZpnD9/Xp06dVJWVpZWrVqlgwcP +6osvvtCf/vQnZWZmSpKOHj3q+UpOTpYk7du3r0D7jSI3N/e6++jbt6+OHz+utWvXlsOIgMpBcAUq +wKBBgzx3Q5KkS5cuacmSJRo0aFChx77xxhuKiopSQECA6tWrpxdeeEGXL1/2HH/33XcVFxenwMBA +hYWFaeDAgQWugOVfdfr888/VsmVLBQYGqnXr1tq3b1+x45s3b55uu+02+fn5qW7dupo5c2aZxpSb +m6uxY8cqIiJCVatWVb9+/fT+++97rn4VdYWsqKt3JdUpzdzy8vL02muvqXHjxgoICFCdOnWUmJhY +pvlcraQ+c3NzNWnSJEVGRiogIEBRUVFauHBhgT7yx75mzRq1atVKbrdbd999t3755Rdt2bJFrVu3 +ltvtVuvWrfXTTz8V+r0vvvhC7dq1k9vtVv369TV79uxix1uaeaanp6t27dpKSEjwPH7nzp1yu92e +f2Rd/bp17txZkhQWFlbgimRiYmKB25bmu+eeexQfH1/k2JYvX67777+/yGO1atXSrbfeqqZNm+rP +f/6zvv76a/n6+urFF18scc75tm/frv/93//VX//6V7Vt21Z169ZVXFyc4uPj1b9/f0nSrbfe6vmq +UaNGgdr5X0W51t9LeZ4rn332mdq0aaOAgADPVeKSzt1rjS0gIEA9e/bUBx98UOrnEbjhGADWpKam +Gklm3759xu12m59//tkYY8x///d/m9tvv92sX7/eSDKZmZnGGGNefPFFExUVZT799FNz+PBhs3bt +WtOgQQMzYcIET5/vvfeeWbdunTl06JDZsGGDad68uRk4cGChmu3atTObN282P/74o7n77rtNp06d +ihzjr7/+alwul3n11VfNgQMHzLfffmtWrlzpOV6aMcXHx5tatWqZlStXmoMHD5p58+aZ8PBwz9zy +x5Senl5onGWZe2nm9txzz5mwsDCzbNkyc+jQIfPtt9+axYsXl2k+Vyupz2HDhpmIiAjP/OfPn28C +AwPNokWLCo397rvvNps2bTJ79+417dq1My1btjSdOnUy33zzjaeta9euhX6vcePGpeo//zkuzTxX +r15t/P39zaZNm8y5c+dMs2bNzKBBg4rtMzk52XM+Hz161Bw9etQYY8zhw4eNr6+v2bJli+d39+7d +aySZHTt2FHo+z5w5Y1wul1m3bl2B9qLOk3wzZ840tWvXvubjrjynDhw4YFwul5k6daq5dOlSof6u +dvX5WJyS/l7K81yJi4szGzZsMAcOHDDp6eklvqYljS3/ebz99ttLfD6AGxXBFbDoyjfYRx55xPMG +06dPH5OUlFTgzTI7O9tUqVLFbNq0qUAfS5cuNTVq1Ci2xooVK0zVqlVNXqo/+yoAAAiuSURBVF5e +gZrr16/3POaDDz4wfn5+Rb6Bf/vtt8UGjNKM6fTp0yYgIMC89957BR4zduzYUgfX0s69pLmdOXPG +BAYGmnfeeafI5+r3PMcl9Xnq1Cnj7+9faP7PPfeciYqKKjT2K8Pahx9+aCSZtLS0Am1+fn4mNze3 +wO8V1X90dHSh/tPT08s0z1GjRpmGDRuaQYMGmUaNGpmzZ88W2eeVPxcV7vr06WOGDh1aYHytWrUq +8jn7/vvvjSTz008/FWi/VnD97LPPjCRz4cKFUgVXY4yZNWuWCQoKMsHBwebee+81zz77rPn222+L +HFNpg+u1/l7K+1y5MnSW5jW91tjyJScnG5fLZS5evHjNeQI3KoIrYNGVb7Br1qwx9erVM4cOHTIB +AQHm8OHDBd4st27daiSZqlWrFvhyu91GkidQfPXVV6Zr164mIiLCBAcHe46fOXOmQM3jx48XGsep +U6cKjfHSpUumdevWpnr16mbgwIHmww8/9ISm0oxpy5YtRpI5ePBggX4/+eSTUgfX0s69pLkVN5Z8 +pa1zpZL6/Oabb645//Pnz5c49pMnTxb7WuX/XNr+09PTyzTP8+fPm6ioKOPj42O++eabAjXKElw/ +/vhjU716dXPu3DmTm5trateubebOnVvkc5aWlmYkea7YFlfvSp9++mmZg6sxv4XJVatWmaSkJNOt +WzfjcrnMzJkzC/Vf2uB6rb+X8j5X/vnPf3oeU5rX9Fpjy7d27VojyfzrX/+65jyBG5VfGVYVALgO +3bp1k4+Pjx577DF16dJF9erV088//+w5npeXJ0lavXp1kWvrgoKCdOrUKfXq1UsPPvigkpKSFB4e +rs2bN+vxxx8vtEbTx6fwEnZTxKeJ/fz89PXXX2vNmjVavXq1hg4dqqVLl2rFihWlGlO+a32Ap6hj ++X1f+X1p6kiln1txNUtbx4aixl6a+ZTlA1JlmeeBAwd0+PBhuVwu7d+/X23bti11nSv16dNHQUFB +Sk5OVvXq1XX69GkNGDCgyMcGBwdLks6ePVvsOtKr/fjjj6pTp44CAgIUEBAgSbpw4UKBx5w/f16S +FBgY6GmrVq2a+vTpoz59+mjSpElKSkrS5MmTFR8fX+TzXpJr/b2Ut/x5SqV7TX18fEoc25kzZ+Ry +uTyvAeBtCK5ABfHx8dGgQYOUmJhYaIcBSYqNjZXb7dahQ4d07733FtnHnj17dPbsWSUlJSkyMlKS +9Pe///26x+bv768//OEP+sMf/qCOHTvqkUceUU5OTqnGFB0drYCAAG3cuLHAnpwbNmzwfB8SEiJJ +ysjIUHh4uCTphx9+8BwvTZ3SiImJUWBgoNavX1/kB99+T52S+oyJiZG/v782btyoRx991NO+ceNG +RUdHFwhR1+Pq5zctLa3Y/ks7z0uXLmnAgAHq16+f2rZtq2HDhumee+4pdrcLX19fSQX/0ZHPz8/P +8yHE6tWr66GHHvK87ldr3LixXC6XDh48qCZNmlxz3pKUk5Ojt99+W3/84x8lSY0aNZLL5dLOnTtV +t25dz+O2b9+uOnXqqEqVKsX21aJFC2VnZ+vSpUu/+7Up7u/F5rlS2te0uLHlPycHDx5Uw4YN5e/v +/7vmDlQ2gitQgSZNmqSRI0d6PsF8peDgYI0fP14jR47U5cuX1aFDB126dEnbtm3Tvn379MILL6hB +gwby9fXVm2++qWHDhmn79u164403rmtMW7du1datW9WtWzf5+fkpJSVFdevWldvtlsvlKnFMISEh ++s///E+NHTtWYWFhuuOOO7R27VotXrzYUyM2Nlbh4eFKSkrSK6+8or179xYYd2nmXhrVqlXTqFGj +9Oyzz6pKlSpq166djh8/rt27d+vxxx//XXVK6vPq+d955536/PPPNWvWLM2dO/e6XpsrJSYmKiws +TC1atNDatWs1a9asYncWKO08J0+erPT0dK1bt07Vq1fX6tWr9dhjj2n9+vVFXo2sX7++JGnlypXq +06ePXC6X5x8ikjR48GBNmzZNPj4+WrduXbFzqVatmuLi4jzn3dVOnDih3NxcnT17Vt9//72mTZum +y5cv66WXXpIk3XLLLbr//vv17LPPqmrVqrr99tv13Xffafr06Ro1apQk6euvv9bs2bP18MMPq0WL +FgoMDNTOnTs1btw49erV63eH1pL+XmydK6V5Ta81tivH37Fjx981d+CGUMlLFQBHu9aavSuPX7mu +bt68eaZFixYmICDAVK1a1bRp08bMnz/fc3zhwoWmdu3axu12m65du5rFixcX6KM0n+C/0p49e0zn +zp1NtWrVjL+/v2nbtm2BT4eXZkwXL140Y8aMMTVr1jRVqlQxvXr1MkuWLClQc82aNaZRo0YmMDDQ +dOnSxbz33ntlnntp5nb58mUzZcoU06BBA+Pr62vq1q1rkpKSyjSfq5XU56VLl8yECRNM3bp1jb+/ +v2natGmh/kr7ulzdlv/zmjVrTNu2bU1gYKCJjIw0s2bNKrH/a81zw4YNxs/Pz6Smpnoef/ToURMR +EWGmTJlSbJ8vv/yyqV27tvHx8TFFvYV07tzZNGnSpNjnMt/UqVNNmzZtipyDJONyuUxISIhp1aqV +SUhIMKdPny7w2NOnT5uhQ4eaWrVqGT8/P1O/fn2TmJjoWdN55MgR89RTT5mYmBgTGBho/P39TcOG +Dc3o0aML9VXU816ckv5ebJ0r+a71mpY0tgsXLpiwsDCzevXqa84RuJG5jOEWGgDK34YNG9S5c2dl +ZmYqNDS0sofjtfKfx/T09AJXN29U0dHReuKJJzRu3LhrPu7kyZNq2LChvvnmGzVr1qyCRndzS05O +1sSJEz137QO8ETcgAABct/T0dP31r3/VoUOH9MQTT5T4+Jo1a2rs2LF65ZVXKmB0kKQpU6YoKSmJ +0AqvxhpXAMB1q1WrlsLDwzV37lzVqlWrVL9T2rXLKB/btm2r7CEA142lAgAAAPAK/w/5pT4YTK6I +dwAAAABJRU5ErkJggg== +" /> +<br /><br /><img border="0" src="data:image/png;base64,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 +KSnR1KlTFRUVpYYNG2rIkCF66623PGe9KvqvzIrOilVVpzpjKy0t1fPPP6+2bdsqKChI1157rVJS +Umo0notVtc6SkhI99thjio6OVlBQkGJiYrRkyZJy6yjr+9q1a9W5c2e53W7deuut+u6777R161Z1 +6dJFbrdbXbp00TfffOP1e5988om6d+8ut9ut66+/XvPmzau0v9UZZ15enlq0aKHk5GTP63ft2iW3 +2+35R9bF+61Pnz6SpIiICM+ZUElKSUkp90jSMrfddpsmTpxYYd9WrFih3//+9xUua9asmZo3b17u +y9/fv1yfLvUeqKyfF/7+Rx99pK5duyooKEhr1qyp0T681L6o6bZ47bXXdM0113i9/4YNG6YhQ4ZI +qvqYr6iPl3usXepvQlBQkAYOHKi33367wj4A9c4A+FWysrKMJLNv3z7jdrvNt99+a4wx5n//93/N +DTfcYDZs2GAkmYKCAmOMMU8++aSJiYkxH374oTl06JBZt26dad26tZkxY4ZnnW+++aZZv369OXjw +oNm4caPp2LGjGT58uFfN7t27my1btpivv/7a3HrrraZ3794V9vH77783LpfLPPPMM2b//v3miy++ +MKtXr/Ysr06fJk6caJo1a2ZWr15tDhw4YBYuXGgiIyM9YyvrU15enlc/azL26oxt2rRpJiIiwixf +vtwcPHjQfPHFF2bp0qU1Gs/Fqlrn2LFjTVRUlGf8ixYtMsHBwSYtLc2r77feeqvZvHmzycnJMd27 +dzedOnUyvXv3Np9//rmnLTEx0ev32rZtW631l23j6oxzzZo1JjAw0GzevNmcPn3adOjQwYwYMaLS +dWZkZHjez4cPHzaHDx82xhhz6NAh4+/vb7Zu3er53ZycHCPJ7Ny502t7njhxwrhcLrN+/fpy7RW9 +Ty5WnfdAZf288PcTEhLMxo0bzf79+01eXl6N9uGl9kVNt8WPP/5ogoKCzEcffeRpO3nypAkJCTFv +v/22Mab6x3xeXl6tHGtV/U0wxpg5c+aYG264odL9BNQngivwK134IXLvvfd6PhgGDx5sUlNTy32g +FBUVmQYNGpjNmzeXW0d6erpp0qRJpTVWrVplGjZsaEpLS8vV3LBhg+c1b7/9tgkICDDnzp3z+v0v +vvii0g/V6vTpp59+MkFBQebNN98s95qpU6dWO7hWd+xVje3EiRMmODjYvP766xVuq1+zjataZ2Fh +oQkMDPQa/7Rp00xMTIxX3y8Ma++8846RZLKzs8u1BQQEmJKSknK/V9H6Y1UqXJwAAAfRSURBVGNj +vdafl5dXo3FOmjTJtGnTxowYMcLceOON5uTJkxWu88KfywLQhQYPHmzGjBlTrn+dO3eucJv9/e9/ +N5LMN998U669bP0NGzYs99WyZUuv11zq/X2pfpYtuzCI1XQfVrUvarItjDHmD3/4Q7kgumzZMhMW +FmaKi4srfH1lx3x1gmt13huX+ptQJiMjw7hcLnP27NlKXwPUF4Ir8Ctd+CGydu1a06pVK3Pw4EET +FBRkDh06VO4DZdu2bRV+aLvdbiPJEyg+++wzk5iYaKKiokxoaKhn+YkTJ8rVPHr0qFc/CgsLvfp4 +7tw506VLF9O4cWMzfPhw884773hCU3X6tHXrViPJHDhwoNx6P/jgg2oH1+qOvaqxVdaXMtWtc6Gq +1vn5559fcvxnzpypsu/Hjx+vdF+V/Vzd9efl5dVonGfOnDExMTHGz8/PfP755+Vq1CS4vvvuu6Zx +48bm9OnTpqSkxLRo0cIsWLCgwm2WnZ1tJJU7E3rh+rdt22a++eYbz1dubq7Xay71/q5OcP3nP//p +aavpPqzqdTXZFsYYs3LlShMaGmqKioqMMcYMHDjQjBw50rO8usd8dYJrdd4bl/qbUGbdunVGkvnx +xx8rHRdQXwKqvpgAQFX69esnPz8/3X///erbt69atWqlb7/91rO8tLRUkrRmzRo1b97c6/dDQkJU +WFioO+64Q3fddZdSU1MVGRmpLVu26IEHHvC6Rs7Pz/vydFPBXcABAQH629/+prVr12rNmjUaM2aM +0tPTtWrVqmr1qcylbuCpaFnZui/8vjp1pOqPrbKa1a1jQ0V9r854anKDVE3GuX//fh06dEgul0u5 +ubnq1q1btetcaPDgwQoJCVFGRoYaN26sn376ScOGDavwtaGhoZKkkydPVti/Nm3aKDIy8pL1fu17 +oExQUFC1X3uxqvZFTbaF9MvNTv7+/nrvvfeUmJioTz75RGvXrpWkGh3zlfWtpsean59fpX8Typw4 +cUIul8uzL4ErCcEVqAV+fn4aMWKEUlJSvGYYkKT4+Hi53W4dPHhQv/3tbytcx969e3Xy5EmlpqYq +OjpakvTee+9ddt8CAwP1u9/9Tr/73e/Uq1cv3XvvvSouLq5Wn2JjYxUUFKRNmzaVm5Nz48aNnu/D +wsIkSfn5+Z5A8tVXX3mWV6dOdcTFxSk4OFgbNmyo8Ma3X1OnqnXGxcUpMDBQmzZt0n333edp37Rp +k2JjYxUcHPxrh1POxds3Ozu70vVXd5znzp3z3ATUrVs3jR07Vrfddluls12U3SB1YRAqExAQ4LkJ +sXHjxrr77rs9+/1ibdu2lcvl0oEDB6zMFnCpflakpvuwqn1Rk20hScHBwfrjH/+ov/zlL8rPz1fz +5s3Vu3dvSTU/5mvrWKvsb0KDBg0kSQcOHFCbNm0UGBhY6TqA+kJwBWrJY489pgkTJqhJkyZey0JD +QzV9+nRNmDBB58+fV8+ePXXu3Dlt375d+/bt0xNPPKHWrVvL399fr7zyisaOHasdO3bo5Zdfvqw+ +bdu2Tdu2bVO/fv0UEBCgzMxMtWzZUm63Wy6Xq8o+hYWF6b/+6780depURURE6KabbtK6deu0dOlS +T434+HhFRkYqNTVVTz/9tHJycsr1uzpjr45GjRpp0qRJ+u///m81aNBA3bt319GjR7Vnzx498MAD +v6pOVeu8ePy33HKLPv74Y82dO1cLFiy4rH1zoZSUFEVEROjmm2/WunXrNHfu3EpnFqjuOB9//HHl +5eVp/fr1aty4sdasWaP7779fGzZsqPCM5vXXXy9JWr16tQYPHiyXy1XuzOioUaP03HPPyc/PT+vX +r690LI0aNVJCQoLnfXexY8eOeU1R1aRJk2qfJa2qnxer6T6szr6o7rYoM3z4cN1+++36/vvvNXTo +UM/2r+kxXxvH2qX+JpTZtm2bevXqVeW4gHpRv1cqAL6rqrukK7oWb+HChebmm282QUFBpmHDhqZr +165m0aJFnuVLliwxLVq0MG632yQmJpqlS5eWW0d17iq+0N69e02fPn1Mo0aNTGBgoOnWrVu5O6Kr +06ezZ8+aKVOmmKZNm5oGDRqYO+64wyxbtqxczbVr15obb7zRBAcHm759+5o333yzxmOvztjOnz9v +Zs+ebVq3bm38/f1Ny5YtTWpqao3Gc7Gq1nnu3DkzY8YM07JlSxMYGGjat2/vtb7q7peL28p+Xrt2 +renWrZsJDg420dHRZu7cuVWu/1Lj3LhxowkICDBZWVme1x8+fNhERUWZ2bNnV7rOp556yrRo0cL4 ++fmZij4e+vTpY9q1a1fptizz7LPPmq5du1Y4hoq+yu66r+52rKyflR2TNdmHVe2Lmm4LY355j7Vq +1arCm6Jqesxf7rFW1d+En3/+2URERJg1a9ZUa2xAXXMZw+MxANTMxo0b1adPHxUUFCg8PLy+u+Oz +yrZjXl5eldd9XgliY2M1cuRIPfLII5d83fHjx9WmTRt9/vnn6tChQx317vLUdF9Ud1v4moyMDM2c +OdPz9D/gSsMDCAAAl5SXl6f/+Z//0cGDBzVy5MgqX9+0aVNNnTpVTz/9dB30rm7VdFv4mtmzZys1 +NZXQiisW17gCAC6pWbNmioyM1IIFC9SsWbNq/U51r132Nb9mW/iS7du313cXgEviUgEAAAD4hP8H +TJ6nMoQjENwAAAAASUVORK5CYII= +" /> +</div><hr><div class="info-header"><span class="info-header-title">Dinucleotide Odds Ratios</span></div><div class="info-content"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="info-table-type"> </td><td class="info-table-value">AA/TT</td><td class="info-table-value">AC/GT</td><td class="info-table-value">AG/CT</td><td class="info-table-value">AT</td><td class="info-table-value">CA/TG</td><td class="info-table-value">CC/GG</td><td class="info-table-value">CG</td><td class="info-table-value">GA/TC</td><td class="info-table-value">GC</td><td class="info-table-value">TA</td></tr><tr><td class="info-table-type">Odds ratio</td><td class="info-table-value">0.3954</td><td class="info-table-value">2.4378</td><td class="info-table-value">0.4858</td><td class="info-table-value">0.3623</td><td class="info-table-value">1.0736</td><td class="info-table-value">0.3006</td><td class="info-table-value">1.9166</td><td class="info-table-value">0.4338</td><td class="info-table-value">0.5829</td><td class="info-table-value">1.8332</td></tr></tbody></table><br /><img border="0" src="data:image/png;base64,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 +AABJRU5ErkJggg== +" /> +<br /><br /><img border="0" src="data:image/png;base64,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 +m+stSQoNLVR0tEMREQWy2TxcIAAAcCIkuUlRkbRmjb8yMkq/5dnZ3srO9lZWVoHi4s7Ji2t7AABU +C5yS3SQ93V4mIJWUkeGj9HS7GysCAADlISS5SVpaxRftXGkDAADcg5DkJrm5Fb/VrrQBAADuwVkZ +AADAAiHJTUJDi6qkDQAAcA8mwbhJVFSBsrO9y20THV3g/H7ChAnasGGDvLy8dObMGeXm5urgwYNX +u0wAAPD/EZLcJDLSoUOHvPX999ZveWRkgSIiHM7HiYmJkqSAgAD97W9/U1pamlvqBAAAvyAkuYnN +JvXrd06NG/soLc2uY8d++aQzPLxIUVEO3XLLpReT/OijjzRp0iQ3VgsAAGzGGOPpIirrzJkzni7B +bXJychQbG6vMzEx5e5f/cR0AANezwMDAKu2PidvV3KJFi3T//fcTkAAAcDNCUjW3aNEiDRgwwNNl +AABw3SEkVWOZmZk6c+aMYmJiPF0KAADXHUJSNfbRRx9p0KBBni4DAIDrEhO3q7mAgADl5+d7ugwA +AKo9Jm4DAAC4ASEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADA +AiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJ +AADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADA +AiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJ +AADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADA +AiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJ +AADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADAAiEJAADA +AiEJAADAAiEJAADAAiEJAADAAiEJAADAgo+nC7jeGCOlp/toxw67cnO9JUmhoYWKjnYoIqJANpuH +CwQAAJIISW5VVCStWeOvjIzSb3t2treys72VlVWguLhz8uL6HgAAHsfp2I3S0+1lAlJJGRk+Sk+3 +u7EiAABwKYQkN0pLq/jCnSttAADA1UdIcqPc3IrfblfaAACAq48zMgAAgAVCkhuFhhZVSRsAAHD1 +EZLcKCqqoMI20dGl2zz//PPq0qWLYmJiNGfOnKtVGgAAuAizhN0oMtKhQ4e89f331m97ZGSBIiIc +zscLFixQVlaWUlNT5eXlpePHj7urVAAArns2Y4zxdBGVdebMGU+XcNmMkXbt8lFaml3Hjv1yIS88 +vEhRUQ7dckvpxSR79+6thQsXqlGjRh6qFgCAmiMwMLBK+yMkVWONGjXS2LFjtWzZMoWGhuq1115T +8+bNPV0WAADVUlWHJOYkVWOFhYVq3bq1UlNTNXz4cP3hD3/wdEkAAFw3uJJUjXXu3Fk7duzQhQsX +VFhYqCZNmujQoUOeLgsAgGqJK0nXkb59++qzzz6TJG3YsEGtWrXycEUAAFw/uJJUjeXl5Wn06NHa +u3evfH199eabb6p9+/aeLgsAgGqJiduqeSHJGCk93Uc7dtiVm+stSQoNLVR0tEMREaXvaLtYQECA +8vPz3VQpAAA1V1WHpCpdJ+n06dOaOHGicnNzFRYWpsTERAUEBJRqs23bNs2YMUOFhYXy8vLShAkT +FB0dLUmaMWOGtm3bJkk6d+6cfvrpJ61fv74qS3S7oiJpzRp/ZWSUfquzs72Vne2trKwCxcWdkxcf +fAIAUK1U6ZWkmTNnql69eho2bJgWLFigkydPauzYsaXa7N27V8HBwQoJCdG3336radOmadmyZWX6 ++vDDD7V7924999xzZfbVpCtJO3fatXatX7lt+vU7r/btHZb7uJIEAIBrqvXE7U2bNumuu+6SJPXv +318bN24s06ZFixYKCQmRJLVv3/6Sq0ivXbvW2VdNlpZW8cU6V9oAAAD3qtKz87FjxxQWFiZJCg0N +VW5ubrntV6xYoR49epTZfvjwYR0+fFgxMTHObSW/T0lJqZqC3SA3t+Ic6kobAADgXh67hLF7924t +XLhQ8+bNK7Pv008/VZ8+feRVYqJO8VwlqWZ93AYAAGqmy76EsXjxYg0ePFiDBw9WTk6OJCksLMz5 +fW5urkJDQy2fe/ToUU2cOFHTp093Xnkq6Vr5qE2SQkOLqqQNAABwr8sOSQMGDFBSUpKSkpKcQSc2 +NlbJycmSpNWrVys2NrbM8/Lz8/Xkk0/qiSeeULt27crs/+9//6uzZ88qMjLyckurVqKiCipsEx1d +us2LL76oLl26KCYmRrNnz75apQEAgHJU6WSYUaNGKTU1VQMHDtQ333yjkSNHOveNGDFCkrRs2TId +OHBAb731lvNKVFHR/66krF27Vv369avKsjwqMtKhyMhLB6XIyAJFRPzvzrYFCxbowIEDSk1N1bZt +2/S73/3OHWUCAICLsJikGxgj7drlo7Q0u44d+yWXhocXKSrKoVtuKb2YZO/evTV37lznnyBhCQAA +AFzDituqeSGpMho1aqQxY8Zo1apVCg0N1bx581S/fn1PlwUAQLVXrddJwpUrLCxUq1atlJqaquHD +h5f6yBIAALgPV5Kqmc6dO2vTpk2y2+0qLCzUzTffrIMHD3q6LAAAqj2uJF3j+vbt6/x7dRs2bFDr +1q09XBEAANcnriRVM3l5eRo5cqSysrLk6+ur+fPnq2XLlp4uCwCAao+J2y6KiYkptUp3TXWtjAMA +gMvhyfMgH7cBAABYICQBAABYuGY/bgMAALgSXEkCAACwQEgCAACw4OPpAi7X6dOnNXHiROXm5ios +LEyJiYkKCAgo1Wbbtm2aMWOGCgsL5eXlpQkTJig6OlqStHv3bk2dOlUFBQVq3LixEhISVLt2bU8M +pVyujBMAgJqmvHN0SbGxsWratKkkaciQIYqPj5fknvN4jZ2TNHPmTNWrV0/Dhg3TggULdPLkSY0d +O7ZUm7179yo4OFghISH69ttvNW3aNC1btkyS9PDDD2vMmDHq0aOHNm3apO3bt+vxxx/3xFDK5co4 +AQCoaco7R5d022236auvviqz3R3n8Rr7cdumTZt01113SZL69++vjRs3lmnTokULhYSESJLat2+v +48ePO/dlZWWpa9eukqRu3bpZPr86cGWcAADUNOWdo13hjvN4jQ1Jx44dU1hYmCQpNDRUubm55bZf +sWKFevTo4XzcokULrVu3TpK0bt06HTly5OoVewUqO04AAGqai8/RJRljNHjwYD366KP68ccfndvd +cR6vsSGpMnbv3q2FCxfqySefdG6bPHmyli9froEDB2rPnj3y9vb2YIUAAFyfrM7RJa1cuVJJSUm6 +7777lJCQ4NzujvN4jZi4vXjxYn388ceSpFmzZiksLExhYWHKyclReHi4cnNzFRoaavnco0ePauLE +iZo+fbrziowkNW/eXHPnzpUkHThwQFu3br36A7kMro4TAICa5lLn6JKCg4MlSf369dPLL7/s3O6O +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 +W7c691d0jFR2/CWPWVfHXJ5vv/3WSDL/+c9/Sm0/fPiw+dWvfmW8vb2NzWYz9957r/OXjAsXLpjG +jRubu+++2xw+fNgYY0xmZqbp0KGD82qTMcasWrXKdOjQwdx4442mZ8+eZufOnWbhwoUmJibGbNmy +xcTGxprGjRub+Ph4c+jQoVKvv3TpUmOz2ZxXf4HKYk4SrhkdOnRQ586ddfvtt+vhhx/WRx99pMLC +wivqs2nTpgoMDFR4eLjy8/P1z3/+s0ybTp06udRXRESE8/vw8HAVFBQoPz9fGRkZOn/+vO64445K +19ezZ88yjzMzM3X+/HlJ0tdff60+ffooPDxcQUFBGjRokPLz83XmzJlKv9alZGZmyuFwWNaye/du +Zy3FIiMjnd+HhYVJKv3ehIWFqaCgoEyN5Y21sjVc6meRnp6un3/+Wb/+9a8VGBjo/BoxYoROnDhR +pqZL9VNZY8eO1ZEjR7Ro0SL169dPO3bsUJcuXfTqq69KUoXHSGXHX/KYreyYrRS3CQwMLLV9+PDh +Cg0N1ZYtW5SSkqI9e/boueeekyTZ7XZ98sknOnLkiBo0aCB/f3/dddddiouLkyR5e3tLkuLj4/Xv +f/9bR44cUUpKiho0aKDx48dr9uzZuv/++3XPPfdo3759qlOnjoYPH17q9evUqSNjTJUe77i++Hi6 +AKCq+Pj46Ouvv9batWuVnJys0aNHKykpScuXL7/sPtevX6+QkBDVrVv3kneW+fr6utSXl1fZ30nM +Fd55U95E7pMnTyouLk4PPPCAEhISFBoaqs2bN+uRRx5xKTy2bNlSNptNu3btUqNGja6ozpKs3gdX +3puqnLR+qdcrKiqSJCUnJ+umm24q06Z27dou9XM5goKCFB8fr/j4eE2aNEkJCQmaPHmyxo4de1n9 +lafkMVvZMVspDkenT5929pGWlqa1a9fq+++/d4bJqVOnasiQIZo2bZrsdrvat2+vrVu36sSJEzp7 +9qwaNmyoN954Q40aNbrkv6u//OUvGjJkiHx8fHTo0CENHTpUXl5eGjx4sO677z45HA7Z7XZJUl5e +nmw2W5nwBriKK0m4ptjtdt19992aPXu25syZo48//lg///yzpP/9Zlp8UnBFs2bN1KJFi6t66327 +du3k5+enL774otLP/fLLL0s93rBhg9q2bSs/Pz/t2rVLp0+fVkJCgrp3765WrVrp2LFjLvddr149 +9enTx3k142LFt7a3a9dOdru9TC1ffvmls5aqUN5Yq6qGiIgrkX8VAAAECUlEQVQI+fv7a//+/WrZ +smWZL6tQdCmXc7yVFBUVpfz8fDkcjgqPkSsZf1WMuThQZ2VlObdduHBB0v/eh+LvCwoKygTJkJAQ +NWrUSMYYLViwQL/97W8tX+fLL7/U+vXrNXXqVGfQdzgcztcrKioq9X5nZWWpWbNmztAEVBZXklCj +fPfdd5KkPXv2SJJ27typoKAgdejQQVu2bNGWLVvUp08f+fj4aOXKlWrYsKH8/f0lSTfffLMkacWK +FYqPj5fNZlNoaKhnBlJCUFCQ/vznP2vcuHGqVauWYmNjdfToUaWnp1e45MALL7yg4OBgRUVFad26 +dZo1a5Zmz54t6ZePCr29vfX666/rscce03fffafXXnutUrW98cYb6tGjh37zm99o3LhxatasmXJz +c7V8+XJt375dn3zyierUqaNHH31UTz/9tIKDgxUdHa1PP/1Us2bN0ptvvnnZ70tlxlpVNQQGBmrC +hAl6/PHHVVhYqNtvv10Oh0Pbt2/X7t27nR8VucLV4+3rr7/W7Nmz9dBDDykqKkp+fn5KS0vT//3f +/ykuLk5+fn7y8/Mr9xi5kvFXxZhL/hvs06ePJKl9+/aqX7++xo8fr7/+9a86e/asXnjhBd1xxx3O +q0RLlixRSEiIWrdurezsbCUmJur48eOWr3n+/HmNHj1ab7zxhmrXrq2oqCjVq1dPr7zyisaNG6e/ +//3vuvXWW0sFwi1btpT5CBKoFA/OhwIqTRa3VRcfxrt27TK9e/c2QUFBxm63m65du5pvvvmm1POn +TZtm6tevb7y8vCq9BICrbS41ybpku4sn9RYWFpqXXnrJNG3a1Hh7e5uGDRuahISECvtcu3at6dq1 +q/Hz8zONGzc2s2bNKlXL22+/berXr2/8/f3NnXfeaebPn1/qdV0Z5/79+82oUaNMw4YNjY+PjwkL +CzMPPfSQ2b59u7ONw+EwzzzzjGnYsKHz9vN58+ZV+H5ZTW6+eJurY63KGubMmWOioqKMr6+vCQgI +MF26dCnVl6v9uHK8HT582IwZM8a0a9fO+Pn5Gbvdbpo1a2aeeOIJc+rUKWe7io6Ryx2/q2OuSGJi +ounSpUupbdu3bze33Xab8fPzM4GBgeb+++93TtI25pe7zxo2bGi8vb1NeHi4GTly5CXvApwyZYoZ +OHBgqW1ffPGFadOmjbHb7SY2Ntbs2bPHue/8+fMmODjYJCcnuzwG4GI2Y1iOFKhpUlJS1Lt3b+Xk +5FSLq2FX0/U01prs+PHjatasmVJTU3XLLbd4uhwtXbpUzz77rDIyMty+CCuuHcxJAgBcsXr16unp +p5/Wiy++6OlSJEkvvfSSEhISCEi4IsxJAgBUicrM2bratm/f7ukScA3g4zYAAAAL/w+im6Qv6dEQ +2AAAAABJRU5ErkJggg== +" /> +<br /><br /><img border="0" src="data:image/png;base64,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 +1fU3KHXebV17bJ0/01gsz6WtGEhZKiGEcPbgcWp4fv75Z3zwwQdYuXKls798hugAACAASURBVEOp +d4899hieeOIJh82542qaUluwpam0E8v6vnLlCtRqNVQqFTZs2IClS5fiu+++k11uUzl/NfH19TU+ +CUsNX5OaAoDsd8stt+D06dOKTibZEF24cAGnTp1q8hduW5pKW7ClKbUTy/reu3cvoqKiEBYWhlmz +ZhmnKJGjKZ0/alzYk0REREQkgT1JRERERBKYJBERERFJYJJEREREJIFJEhEREZEEJklEREREEpgk +EREREUlgkkREREQkgUkSERERkQQmSUREREQSmCQRERERSXB3dgC1cenSJWeH0CS0aNECf/31l7PD +ICIisouPj4+i5bEniYiIiEgCkyQiIiIiCUySiIiIiCQwSSIiIiKS4JIDt60RAsjNdUdWlgcKCtwA +ABpNJSIjK6DV6qFSOTlAIiIichmKJkmlpaWYPHkyCgoKEBgYiLlz56JFixbVtvvss8+wfv16qP7O +Wp555hn06tULAPDWW2/ht99+AwCUlZWhqKgIGRkZNX63wQCkpamxf7/5IZ0544YzZ9yQl6dHYmIZ +mrHvjIiIiOygEkIIpQp7++23ERAQgEceeQQff/wxiouL8eyzz1bb7vLly/D29gYAHD16FGPGjMGW +LVuqbbdu3Tr88ccfmDJlitlyqSkAcnI8kJ7uaTO+hIRyRERUyDmkJo1TABARkStp0FMAZGZmol+/ +fgCA/v3746effpLcripBAq4lTK1bt5bcLj093VheTbKza+4Us2cbIiIiIkDh2235+fkIDAwEAGg0 +GhQUFFjddu3atVi7di2uXLmCDz/8sNr606dP4/Tp0+jevTsAGP8PAN9//3217QsKas737NmGiIiI +CHDiwO1hw4Zh2LBhSE1Nxbx58/Duu++ard+yZQv69u2LZn8PIqoapwRwxm0iIiKqf4p2rQQGBuL8 ++fMAgIKCAmg0mhr36devH/bu3VttuZxbbQCg0RgU2YaIiIgIUDhJio+Px9dffw0A2Lx5M+Lj4yW3 +O336tPHPP/zwAzp16mS2/siRI7h8+TLCw8Pt/m6dTl/jNpGReuN39urVC3FxcbjllluwY8cOu7+H +iIiImgZFb7c9/vjjSEpKQmpqKjQaDebOnWtcN2rUKCxfvhwAkJKSgj179kAIAV9fX0ybNs2snPT0 +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 +2cOHD9fWrVuDuSsAANSJJQDgM25MCwBA/XG5DQAAwAIhCXWquDGtJG5MCwC4YBCSUCduTAsAuBAR +kiCJG9MCAHAuvt2GGnGDWwBAKAn0t9sYSQIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIA +ALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBA +SAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIA +ALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBA +SAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIA +ALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBA +SAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIAALBASAIA +ALBASAIAALBASAIAALBASAIAALBASAIAALAQ3tQF4PxnjJSbG64dOxxyueySJKezTH37upWY6JHN +1sQFAgDQCAhJqFV5ubRuXZTy8qoeKoWFdhUW2lVQ4FFaWqnCGJMEADQznNpQq9xcR7WAVFleXrhy +cx1BrAgAgOAgJKFWOTl1Dzb60gYAgFBDSEKtXK66D5EjRziMAADNT8DObidPntQf//hH/eY3v9H9 +99+vkpKSWts//fTTGjhwYJVte/bs0ZgxYzR69GhNmTJFP/30U6DKQyMqL7epvLypqwAAILACFpJe +fvllDRgwQG+88YauvvpqLVy4sMa227ZtU1FRkSIiIqpsnzlzpu677z6tWLFCI0eOrLUPBIfTWXf6 +KS8X85IAAM1OwELSpk2bdMstt0iShg4dqo8//tiy3ZkzZ5SZmamHHnqo2nMFBQXe0aVBgwbV2AeC +JznZ41O7inlJjzzyiFJSUpSSkqJ+/fqpU6dOjVkeAACNJmAzbg8fPqyYmBhJktPplMvlsmw3b948 +jRgxQu3atav2XPfu3bVhwwalpaVpw4YNOnjwoPe5/v37e3/fuHFjoMpGHZKS3NqwIbLOy2kVc5dm +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 ++A/NmTNH8+fP19tvv61Tp05Jkux2u6SfTwq+6Nq1q7p3796oX73v1auXIiMj9f777/v92g8++KDK +4w8//FA9e/ZUZGSkdu/erZMnTyojI0PXXHONevToocOHD/vcd/v27XXTTTd5RzPOVfHV9l69esnh +cFSr5YMPPvDWEgi17WugakhMTFRUVJT279+vyy+/vNqPVSiqSX2Ot8qSk5NVUlIit9td5zHSkP0P +xD5XBOqCggLL51999VWdOXNGEydOrLEPX9pU7FN2drZmzJjhDftut1uSdObMGZWXl1f5zAsKCtS1 +a9c6gxdQE0aSEDK2b98uSdq7d68kaefOnWrdurX69eunzz77TJ999pluuukmhYeHa82aNYqPj1dU +VJQk6dJLL5UkrV69WsOGDZPNZpPT6WyaHamkdevWevDBBzVlyhS1aNFCKSkpOnTokHJzc+tccuCJ +J55Q27ZtlZycrA0bNigzM1Nz5syRdPZSod1u1wsvvKB7771X27dv1/PPP+9XbS+++KKuvfZa/frX +v9aUKVPUtWtXuVwuvfXWW/riiy/097//XRdddJHuvvtuPfTQQ2rbtq369u2rf/zjH8rMzNTcuXPr +/bn4s6+BqqFVq1Z65JFHdP/996usrEzXX3+93G63vvjiC+3Zs0f//d//7XNfvh5vn3zyiebMmaNR +o0YpOTlZkZGRysnJ0cMPP6y0tDRFRkYqMjKy1mOkIfsfiH2u/G/wpptuqvKcMUZz587Vr3/9a8XH +x1u+3pc2knT69GlNnDhRL774olq2bKnk5GS1b99ezzzzjKZMmaL//d//1XXXXVclFH722WfVLkMC +fmnC+VCAX2TxteqKQ3j37t3mhhtuMK1btzYOh8MMHDjQfPrpp1VeP3PmTBMXF2fCwsL8XgLA1zY1 +TbKu3O7cSb1lZWXmr3/9q7nsssuM3W438fHxJiMjo84+169fbwYOHGgiIyNN586dTWZmZpVaFi5c +aOLi4kxUVJS58cYbzaJFi6q8ry/7uX//fnPnnXea+Ph4Ex4ebmJiYsyoUaPMF1984W3jdrvNo48+ +auLj471fP3/ppZfq/LysJjefu83XfQ1kDfPnzzfJyckmIiLCREdHmwEDBlTpy9d+fDnefvjhB3PP +PfeYXr16mcjISONwOEzXrl3NpEmTzI8//uhtV9cxUt/993Wf6zJ79mwzYMCAatuzsrKqTXKvTxtj +zn7zMD09vcq2999/3yQkJBiHw2FSUlLM3r17vc+dPn3atG3b1mRlZfm8H8C5bMawHCkQSjZu3Kgb +brhBR44cOS9GwxrThbSvoezo0aPq2rWrtmzZot69ezd1OZLOrtT92GOPKS8vL+gLsaL5YE4SAKBB +2rdvr4ceekizZs1q6lK8/vrXvyojI4OAhAZhThIAoMH8mbMVDF988UVTl4BmgMttAAAAFv4fuETc +00HhkB0AAAAASUVORK5CYII= +" /> +</div></div></center></body></html> \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example1_trim_right_10.fastq Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,48 @@ +@seq1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC ++seq1 length=100 +123412341234213412341234123412341234123412341234123413241234123412341234123412341234123412 +@seq1_dupl1 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC ++seq1_dupl1 length=100 +123412341234213412341234123412341234123412341234123413241234123412341234123412341234123412 +@seq1_dupl2 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC ++seq1_dupl2 length=100 +123412341234213412341234123412341234123412341234123413241234123412341234123412341234123412 +@seq1_dupl3 length=100 +ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTACGTAC ++seq1_dupl3 length=100 +123412341234213412341234123412341234123412341234123413241234123412341234123412341234123412 +@seq2 length=200 +ACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTACACAGAGATATATGAGACACACAGATAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGT ++seq2 length=200 +++++++++++++++++..............00000000000000000000333333333333333355555555555555555AAAAAAAAAAAAAA999999999999996666666666666666444444444444444442222222222222222222221111111)))))))))))))))>>> +@seq3 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTG ++seq3 length=100 +FHHFFFFFFDDAA@====AAB===BBBBAAADDDDDDDDAAAADDDDD?????FFFFF??FFFFFFDA@AFFFFFFFFFFFFFFFFCCAB +@seq3_dupl1 length=100 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGCTCTGTGCGTGTACGTGACGTGACGTGGTGTATAGATTGCGTGCGTACGTG ++seq3_dupl1 length=100 +FHHFFFFFFDDAA@====AAB===BBBBAAADDDDDDDDAAAADDDDD?????FFFFF??FFFFFFDA@AFFFFFFFFFFFFFFFFCCAB +@seq4 length=50 +TAGATTGCGTGCGTACGTGTGTGCATGCGTTGTGCCGCGC ++seq4 length=50 +???CCDDBBBBBAA333:ABB=:::AGFFFFFHHHHFFFF +@seq5 length=100 Ns_begin=10 +NNNNNNNNNNTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGAGAAGAGGCGTGGAGGAGATGACACACCCC ++seq5 length=100 Ns_begin=10 +!!!!!!!!!!99999999999999AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFF +@seq6 length=100 Ns_end=10 +TACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAAGTGAGAGTTGTACACCAGAGGTGTCTCTGTGTGGGGCCTGTGTGCCAAAA ++seq6 length=100 Ns_end=10 +FFFFFFFFFFFFFFFFFFEEEEEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAA9999999999999999999995555555 +@seq7 length=50 +TACACCAGAGGTGTCTCTGTGTGGGTACACCAGAGGTGTC ++seq7 length=50 +!''*((((***+))%%%++)(%%%%).1***-+*''))** +@seq8 length=50 As=50 +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ++seq8 length=50 As=50 +5555555555555555555555555555555555555555
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool-data/example_readme.txt Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,36 @@ +This file will contain example commands for newly introduced options. (If you want to copy and paste the commands, do not copy the $-sign.) +For more examples and information, take a look at the Manual (http://prinseq.sourceforge.net/manual.html). + + +(1) Graph data +============== +To generate the graphs from the web version or the HTML report, you can use the -graph_data option: +$ perl prinseq-lite.pl -verbose -fastq example1.fastq -graph_data example1.gd -out_good null -out_bad null + +The verbose mode shows the progress and the "-out_good null -out_bad null" prevents PRINSEQ from generating any other output files than the specified test.gd file containing the graphs data. + +To generate the graph as PNG files, you can use the prinseq-graphs -png_all option: +$ perl prinseq-graphs.pl -i example1.gd -png_all -o example1 + +To generate the HTML report containing all the tables and figures from the web version, you can use the prinseq-graphs -html_all option: +$ perl prinseq-graphs.pl -i example1.gd -html_all -o example1 + + +(2) Consider exact duplicates only +================================== +When you process large files, the duplicate removal will require a lot of memory. To reduce the amount of memory required and speed up the process (at the cost of only removing forward and reverse exact duplicates), you can use the option -exact_only when generating the graphs data: +$ perl prinseq-lite.pl -verbose -fastq example1.fastq -graph_data example1.gd -out_good null -out_bad null -exact_only + +Note that for processing the data, if you specify -derep 1, -derep 4, or -derep 14 then the exact_only option will be used automatically. + + +(3) Duplicate threshold and no quality header information +========================================================= +Process the data (-fastq example1.fastq) with status report (-verbose), remove exact sequence duplicates (-derep 1) that occur more than 2 times (-derep_min 3) and save the sequences passing the filter in example1_good.fastq (-out_good example1_good) without the quality header (-no_qual_header) and the filtered sequences in example1_bad.fastq (-out_bad example1_bad): +$ perl prinseq-lite.pl -verbose -fastq example1.fastq -derep 1 -derep_min 3 -out_good example1_good -out_bad example1_bad -no_qual_header + + +(4) Paired-end data +=================== +Paired-end data is processed similar to single read data. The only difference is that two input files are required (either two FASTA or two FASTQ files). The second file is specified either with "-fasta2 file.fa" or "-fastq2 file.fq". +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tool_dependencies.xml Mon Oct 07 15:34:32 2013 -0400 @@ -0,0 +1,30 @@ +<?xml version="1.0"?> +<tool_dependency> + <set_environment version="1.0"> + <environment_variable name="PRINSEQ_SCRIPT_PATH" action="set_to">$REPOSITORY_INSTALL_DIR</environment_variable> + </set_environment> + <package name="prinseq_perl_dependencies" version="0.20.3"> + <install version="1.0"> + <actions> + <action type="download_by_url">http://downloads.sourceforge.net/project/bowtie-bio/bowtie2/2.1.0/bowtie2-2.1.0-source.zip</action> + <action type="shell_command">perl Makefile.PL PREFIX=$INSTALL_DIR</action> + <action type="shell_command">make</action> + <action type="shell_command">make install</action> + + <action type="download_by_url">http://search.cpan.org/CPAN/authors/id/M/MA/MAKAMAKA/JSON-2.59.tar.gz</action> + <action type="shell_command">perl Makefile.PL PREFIX=$INSTALL_DIR</action> + <action type="shell_command">make</action> + <action type="shell_command">make install</action> + + <action type="set_environment"> + <environment_variable name="PERL5LIB" action="prepend_to">$INSTALL_DIR/lib/perl5/site_perl</environment_variable> + </action> + </actions> + </install> + <readme> + </readme> + </package> +</tool_dependency> + +<!--fisher_exact--> +