diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | doc/.gitignore | 12 | ||||
-rw-r--r-- | doc/gperf.dvi | bin | 134248 -> 0 bytes | |||
-rw-r--r-- | doc/gperf.html | 2482 | ||||
-rw-r--r-- | doc/gperf.info | 2096 | ||||
-rw-r--r-- | doc/gperf.pdf | bin | 243013 -> 0 bytes | |||
-rw-r--r-- | doc/gperf.ps | 6348 | ||||
-rw-r--r-- | doc/gperf_1.html | 825 | ||||
-rw-r--r-- | doc/gperf_10.html | 135 | ||||
-rw-r--r-- | doc/gperf_2.html | 49 | ||||
-rw-r--r-- | doc/gperf_3.html | 42 | ||||
-rw-r--r-- | doc/gperf_4.html | 99 | ||||
-rw-r--r-- | doc/gperf_5.html | 720 | ||||
-rw-r--r-- | doc/gperf_6.html | 502 | ||||
-rw-r--r-- | doc/gperf_7.html | 57 | ||||
-rw-r--r-- | doc/gperf_8.html | 46 | ||||
-rw-r--r-- | doc/gperf_9.html | 96 | ||||
-rw-r--r-- | doc/gperf_toc.html | 59 |
18 files changed, 24 insertions, 13556 deletions
@@ -1,5 +1,17 @@ 2012-07-01 Bruno Haible <bruno@clisp.org> + Remove distributed built files from version control. + * doc/.gitignore: New file. + * doc/gperf.info: Remove file. + * doc/gperf.dvi: Remove file. + * doc/gperf.ps: Remove file. + * doc/gperf.pdf: Remove file. + * doc/gperf.html: Remove file. + * doc/gperf_toc.html, doc/gperf_[0-9].html, doc/gperf_[0-9][0-9].html: + Remove files. + +2012-07-01 Bruno Haible <bruno@clisp.org> + Allow editor backup files in git checkouts. * .gitignore: New file. diff --git a/doc/.gitignore b/doc/.gitignore new file mode 100644 index 0000000..c84fac8 --- /dev/null +++ b/doc/.gitignore @@ -0,0 +1,12 @@ +# Files generated by "make", using makeinfo, texi2html, perl +# and therefore distributed (i.e. kept by "make distclean"). +# Same as DISTRIBUTED_BUILT_FILES in Makefile.in. +/gperf.info +/gperf.dvi +/gperf.ps +/gperf.pdf +/gperf.html +/gperf_toc.html +/gperf_[0-9].html +/gperf_[0-9][0-9].html + diff --git a/doc/gperf.dvi b/doc/gperf.dvi Binary files differdeleted file mode 100644 index 46a0696..0000000 --- a/doc/gperf.dvi +++ /dev/null diff --git a/doc/gperf.html b/doc/gperf.html deleted file mode 100644 index bc964f9..0000000 --- a/doc/gperf.html +++ /dev/null @@ -1,2482 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator</TITLE> -</HEAD> -<BODY> -<H1>User's Guide to <CODE>gperf</CODE> 3.1</H1> -<H2>The GNU Perfect Hash Function Generator</H2> -<H2>Edition 3.1, 20 December 2009</H2> -<ADDRESS>Douglas C. Schmidt</ADDRESS> -<ADDRESS>Bruno Haible</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="gperf.html#SEC1">GNU GENERAL PUBLIC LICENSE</A> -<LI><A NAME="TOC2" HREF="gperf.html#SEC2">Contributors to GNU <CODE>gperf</CODE> Utility</A> -<LI><A NAME="TOC3" HREF="gperf.html#SEC3">2 Introduction</A> -<LI><A NAME="TOC4" HREF="gperf.html#SEC4">3 Static search structures and GNU <CODE>gperf</CODE></A> -<LI><A NAME="TOC5" HREF="gperf.html#SEC5">4 High-Level Description of GNU <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC6" HREF="gperf.html#SEC6">4.1 Input Format to <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC7" HREF="gperf.html#SEC7">4.1.1 Declarations</A> -<UL> -<LI><A NAME="TOC8" HREF="gperf.html#SEC8">4.1.1.1 User-supplied <CODE>struct</CODE></A> -<LI><A NAME="TOC9" HREF="gperf.html#SEC9">4.1.1.2 Gperf Declarations</A> -<LI><A NAME="TOC10" HREF="gperf.html#SEC10">4.1.1.3 C Code Inclusion</A> -</UL> -<LI><A NAME="TOC11" HREF="gperf.html#SEC11">4.1.2 Format for Keyword Entries</A> -<LI><A NAME="TOC12" HREF="gperf.html#SEC12">4.1.3 Including Additional C Functions</A> -<LI><A NAME="TOC13" HREF="gperf.html#SEC13">4.1.4 Where to place directives for GNU <CODE>indent</CODE>.</A> -</UL> -<LI><A NAME="TOC14" HREF="gperf.html#SEC14">4.2 Output Format for Generated C Code with <CODE>gperf</CODE></A> -<LI><A NAME="TOC15" HREF="gperf.html#SEC15">4.3 Use of NUL bytes</A> -<LI><A NAME="TOC16" HREF="gperf.html#SEC16">4.4 The Copyright of the Output</A> -</UL> -<LI><A NAME="TOC17" HREF="gperf.html#SEC17">5 Invoking <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC18" HREF="gperf.html#SEC18">5.1 Specifying the Location of the Output File</A> -<LI><A NAME="TOC19" HREF="gperf.html#SEC19">5.2 Options that affect Interpretation of the Input File</A> -<LI><A NAME="TOC20" HREF="gperf.html#SEC20">5.3 Options to specify the Language for the Output Code</A> -<LI><A NAME="TOC21" HREF="gperf.html#SEC21">5.4 Options for fine tuning Details in the Output Code</A> -<LI><A NAME="TOC22" HREF="gperf.html#SEC22">5.5 Options for changing the Algorithms employed by <CODE>gperf</CODE></A> -<LI><A NAME="TOC23" HREF="gperf.html#SEC23">5.6 Informative Output</A> -</UL> -<LI><A NAME="TOC24" HREF="gperf.html#SEC24">6 Known Bugs and Limitations with <CODE>gperf</CODE></A> -<LI><A NAME="TOC25" HREF="gperf.html#SEC25">7 Things Still Left to Do</A> -<LI><A NAME="TOC26" HREF="gperf.html#SEC26">8 Bibliography</A> -<LI><A NAME="TOC27" HREF="gperf.html#SEC27">Concept Index</A> -</UL> -<P><HR><P> - -<P> -Copyright (C) 1989-2009 Free Software Foundation, Inc. - -</P> - -<P> -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -</P> -<P> -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled “GNU General Public License” is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - -</P> -<P> -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled “GNU General Public License” may be -included in a translation approved by the author instead of in the -original English. - -</P> - - - -<H1><A NAME="SEC1" HREF="gperf.html#TOC1">GNU GENERAL PUBLIC LICENSE</A></H1> -<P> -Version 3, 29 June 2007 - -</P> - - -<PRE> -Copyright (C) 2007 Free Software Foundation, Inc. <A HREF="http://fsf.org/">http://fsf.org/</A> - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. -</PRE> - - -<H2>1.0 Preamble</H2> - -<P> -The GNU General Public License is a free, copyleft license for -software and other kinds of works. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -The precise terms and conditions for copying, distribution and -modification follow. - -</P> - -<H2>1.1 TERMS AND CONDITIONS</H2> - - -<OL> -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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: - - -<OL> -<LI> - -The work must carry prominent notices stating that you modified it, -and giving a relevant date. - -<LI> - -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”. - -<LI> - -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. - -<LI> - -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. -</OL> - -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. - -<LI>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: - - -<OL> -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -</OL> - -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. - -<LI>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: - - -<OL> -<LI> - -Disclaiming warranty or limiting liability differently from the terms -of sections 15 and 16 of this License; or - -<LI> - -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 - -<LI> - -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 - -<LI> - -Limiting the use for publicity purposes of names of licensors or -authors of the material; or - -<LI> - -Declining to grant rights under trademark law for use of some trade -names, trademarks, or service marks; or - -<LI> - -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. -</OL> - -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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -</OL> - - -<H2>1.2 END OF TERMS AND CONDITIONS</H2> - - -<H2>1.3 How to Apply These Terms to Your New Programs</H2> - -<P> -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. - -</P> -<P> -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. - -</P> - -<PRE> -<VAR>one line to give the program's name and a brief idea of what it does.</VAR> -Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see <A HREF="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</A>. -</PRE> - -<P> -Also add information on how to contact you by electronic and paper mail. - -</P> -<P> -If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - -</P> - -<PRE> -<VAR>program</VAR> Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR> -This program comes with ABSOLUTELY NO WARRANTY; for details type <SAMP>‘show w’</SAMP>. -This is free software, and you are welcome to redistribute it -under certain conditions; type <SAMP>‘show c’</SAMP> for details. -</PRE> - -<P> -The hypothetical commands <SAMP>‘show w’</SAMP> and <SAMP>‘show c’</SAMP> 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”. - -</P> -<P> -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 -<A HREF="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</A>. - -</P> -<P> -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 <A HREF="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</A>. - -</P> - - -<H1><A NAME="SEC2" HREF="gperf.html#TOC2">Contributors to GNU <CODE>gperf</CODE> Utility</A></H1> - - -<UL> -<LI> - -<A NAME="IDX1"></A> -The GNU <CODE>gperf</CODE> perfect hash function generator utility was -written in GNU C++ by Douglas C. Schmidt. The general -idea for the perfect hash function generator was inspired by Keith -Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended -implementation of Keith's basic idea, created at the University of -California, Irvine. Bugs, patches, and suggestions should be reported -to <CODE><bug-gnu-gperf@gnu.org></CODE>. - -<LI> - -Special thanks is extended to Michael Tiemann and Doug Lea, for -providing a useful compiler, and for giving me a forum to exhibit my -creation. - -In addition, Adam de Boor and Nels Olson provided many tips and insights -that greatly helped improve the quality and functionality of <CODE>gperf</CODE>. - -<LI> - -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and -added a testsuite. -</UL> - - - -<H1><A NAME="SEC3" HREF="gperf.html#TOC3">2 Introduction</A></H1> - -<P> -<CODE>gperf</CODE> is a perfect hash function generator written in C++. It -transforms an <VAR>n</VAR> element user-specified keyword set <VAR>W</VAR> into a -perfect hash function <VAR>F</VAR>. <VAR>F</VAR> uniquely maps keywords in -<VAR>W</VAR> onto the range 0..<VAR>k</VAR>, where <VAR>k</VAR> >= <VAR>n-1</VAR>. If <VAR>k</VAR> -= <VAR>n-1</VAR> then <VAR>F</VAR> is a <EM>minimal</EM> perfect hash function. -<CODE>gperf</CODE> generates a 0..<VAR>k</VAR> element static lookup table and a -pair of C functions. These functions determine whether a given -character string <VAR>s</VAR> occurs in <VAR>W</VAR>, using at most one probe into -the lookup table. - -</P> -<P> -<CODE>gperf</CODE> currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, -GNU Modula 3, and GNU indent. Complete C++ source code for <CODE>gperf</CODE> is -available from <CODE>http://ftp.gnu.org/pub/gnu/gperf/</CODE>. -A paper describing <CODE>gperf</CODE>'s design and implementation in greater -detail is available in the Second USENIX C++ Conference proceedings -or from <CODE>http://www.cs.wustl.edu/~schmidt/resume.html</CODE>. - -</P> - - -<H1><A NAME="SEC4" HREF="gperf.html#TOC4">3 Static search structures and GNU <CODE>gperf</CODE></A></H1> -<P> -<A NAME="IDX2"></A> - -</P> -<P> -A <EM>static search structure</EM> is an Abstract Data Type with certain -fundamental operations, e.g., <EM>initialize</EM>, <EM>insert</EM>, -and <EM>retrieve</EM>. Conceptually, all insertions occur before any -retrievals. In practice, <CODE>gperf</CODE> generates a <EM>static</EM> array -containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the -insertions. It is a useful data structure for representing <EM>static -search sets</EM>. Static search sets occur frequently in software system -applications. Typical static search sets include compiler reserved -words, assembler instruction opcodes, and built-in shell interpreter -commands. Search set members, called <EM>keywords</EM>, are inserted into -the structure only once, usually during program initialization, and are -not generally modified at run-time. - -</P> -<P> -Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an <VAR>n</VAR> element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is -proportional to log <VAR>n</VAR>. Conversely, hash table implementations -often locate a table entry in constant time, but typically impose -additional memory overhead and exhibit poor worst case performance. - -</P> -<P> -<A NAME="IDX3"></A> -<EM>Minimal perfect hash functions</EM> provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - -</P> - -<UL> -<LI> - -It allows keyword recognition in a static search set using at most -<EM>one</EM> probe into the hash table. This represents the “perfect” -property. -<LI> - -The actual memory allocated to store the keywords is precisely large -enough for the keyword set, and <EM>no larger</EM>. This is the -“minimal” property. -</UL> - -<P> -For most applications it is far easier to generate <EM>perfect</EM> hash -functions than <EM>minimal perfect</EM> hash functions. Moreover, -non-minimal perfect hash functions frequently execute faster than -minimal ones in practice. This phenomena occurs since searching a -sparse keyword table increases the probability of locating a “null” -entry, thereby reducing string comparisons. <CODE>gperf</CODE>'s default -behavior generates <EM>near-minimal</EM> perfect hash functions for -keyword sets. However, <CODE>gperf</CODE> provides many options that permit -user control over the degree of minimality and perfection. - -</P> -<P> -Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure <EM>once</EM>, if it -subsequently receives heavy use multiple times. <CODE>gperf</CODE> removes -the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool -for serious programming projects. Output from <CODE>gperf</CODE> is currently -used in several production and research compilers, including GNU C, GNU -C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -<CODE>gperf</CODE> to automatically generate static search structures that -efficiently identify their respective reserved keywords. - -</P> - - -<H1><A NAME="SEC5" HREF="gperf.html#TOC5">4 High-Level Description of GNU <CODE>gperf</CODE></A></H1> - -<P> -The perfect hash function generator <CODE>gperf</CODE> reads a set of -“keywords” from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that -recognizes a member of the <EM>static keyword set</EM> with at most a -single probe into the lookup table. If <CODE>gperf</CODE> succeeds in -generating such a function it produces a pair of C source code routines -that perform hashing and table lookup recognition. All generated C code -is directed to the standard output. Command-line options described -below allow you to modify the input and output format to <CODE>gperf</CODE>. - -</P> -<P> -By default, <CODE>gperf</CODE> attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct <CODE>gperf</CODE> to utilize a C <CODE>switch</CODE> -statement scheme that minimizes data space storage size. Furthermore, -using a C <CODE>switch</CODE> may actually speed up the keyword retrieval time -somewhat. Actual results depend on your C compiler, of course. - -</P> -<P> -In general, <CODE>gperf</CODE> assigns values to the bytes it is using -for hashing until some set of values gives each keyword a unique value. -A helpful heuristic is that the larger the hash value range, the easier -it is for <CODE>gperf</CODE> to find and generate a perfect hash function. -Experimentation is the key to getting the most from <CODE>gperf</CODE>. - -</P> - - -<H2><A NAME="SEC6" HREF="gperf.html#TOC6">4.1 Input Format to <CODE>gperf</CODE></A></H2> -<P> -<A NAME="IDX4"></A> -<A NAME="IDX5"></A> -<A NAME="IDX6"></A> -<A NAME="IDX7"></A> -You can control the input file format by varying certain command-line -arguments, in particular the <SAMP>‘-t’</SAMP> option. The input's appearance -is similar to GNU utilities <CODE>flex</CODE> and <CODE>bison</CODE> (or UNIX -utilities <CODE>lex</CODE> and <CODE>yacc</CODE>). Here's an outline of the general -format: - -</P> - -<PRE> -declarations -%% -keywords -%% -functions -</PRE> - -<P> -<EM>Unlike</EM> <CODE>flex</CODE> or <CODE>bison</CODE>, the declarations section and -the functions section are optional. The following sections describe the -input format for each section. - -</P> - -<P> -It is possible to omit the declaration section entirely, if the <SAMP>‘-t’</SAMP> -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: - -</P> - -<PRE> -january -february -march -april -... -</PRE> - - - -<H3><A NAME="SEC7" HREF="gperf.html#TOC7">4.1.1 Declarations</A></H3> - -<P> -The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, <CODE>gperf</CODE> declarations that -act like command-line options, as well as for providing a user-supplied -<CODE>struct</CODE>. - -</P> - - - -<H4><A NAME="SEC8" HREF="gperf.html#TOC8">4.1.1.1 User-supplied <CODE>struct</CODE></A></H4> - -<P> -If the <SAMP>‘-t’</SAMP> option (or, equivalently, the <SAMP>‘%struct-type’</SAMP> declaration) -<EM>is</EM> enabled, you <EM>must</EM> provide a C <CODE>struct</CODE> as the last -component in the declaration section from the input file. The first -field in this struct must be of type <CODE>char *</CODE> or <CODE>const char *</CODE> -if the <SAMP>‘-P’</SAMP> option is not given, or of type <CODE>int</CODE> if the option -<SAMP>‘-P’</SAMP> (or, equivalently, the <SAMP>‘%pic’</SAMP> declaration) is enabled. -This first field must be called <SAMP>‘name’</SAMP>, although it is possible to modify -its name with the <SAMP>‘-K’</SAMP> option (or, equivalently, the -<SAMP>‘%define slot-name’</SAMP> declaration) described below. - -</P> -<P> -Here is a simple example, using months of the year and their attributes as -input: - -</P> - -<PRE> -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -april, 4, 30, 30 -may, 5, 31, 31 -june, 6, 30, 30 -july, 7, 31, 31 -august, 8, 31, 31 -september, 9, 30, 30 -october, 10, 31, 31 -november, 11, 30, 30 -december, 12, 31, 31 -</PRE> - -<P> -<A NAME="IDX8"></A> -Separating the <CODE>struct</CODE> declaration from the list of keywords and -other fields are a pair of consecutive percent signs, <SAMP>‘%%’</SAMP>, -appearing left justified in the first column, as in the UNIX utility -<CODE>lex</CODE>. - -</P> -<P> -If the <CODE>struct</CODE> has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - -</P> - -<PRE> -struct month; -%% -january, 1, 31, 31 -... -</PRE> - - - -<H4><A NAME="SEC9" HREF="gperf.html#TOC9">4.1.1.2 Gperf Declarations</A></H4> - -<P> -The declaration section can contain <CODE>gperf</CODE> declarations. They -influence the way <CODE>gperf</CODE> works, like command line options do. -In fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - -</P> - -<OL> -<LI> - -Declarations without argument, like <SAMP>‘%compare-lengths’</SAMP>. - -<LI> - -Declarations with an argument, like <SAMP>‘%switch=<VAR>count</VAR>’</SAMP>. - -<LI> - -Declarations of names of entities in the output file, like -<SAMP>‘%define lookup-function-name <VAR>name</VAR>’</SAMP>. -</OL> - -<P> -When a declaration is given both in the input file and as a command line -option, the command-line option's value prevails. - -</P> -<P> -The following <CODE>gperf</CODE> declarations are available. - -</P> -<DL COMPACT> - -<DT><SAMP>‘%delimiters=<VAR>delimiter-list</VAR>’</SAMP> -<DD> -<A NAME="IDX9"></A> -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. - -<DT><SAMP>‘%struct-type’</SAMP> -<DD> -<A NAME="IDX10"></A> -Allows you to include a <CODE>struct</CODE> type declaration for generated -code; see above for an example. - -<DT><SAMP>‘%ignore-case’</SAMP> -<DD> -<A NAME="IDX11"></A> -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. - -<DT><SAMP>‘%language=<VAR>language-name</VAR>’</SAMP> -<DD> -<A NAME="IDX12"></A> -Instructs <CODE>gperf</CODE> to generate code in the language specified by the -option's argument. Languages handled are currently: - -<DL COMPACT> - -<DT><SAMP>‘KR-C’</SAMP> -<DD> -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking <SAMP>‘const’</SAMP>. - -<DT><SAMP>‘C’</SAMP> -<DD> -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you <CODE>#define const</CODE> to empty -for compilers which don't know about this keyword. - -<DT><SAMP>‘ANSI-C’</SAMP> -<DD> -ANSI C. This language is understood by ANSI C (C89, ISO C90) compilers, -ISO C99 compilers, and C++ compilers. - -<DT><SAMP>‘C++’</SAMP> -<DD> -C++. This language is understood by C++ compilers. -</DL> - -The default is ANSI-C. - -<DT><SAMP>‘%define slot-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX13"></A> -This declaration is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is <SAMP>‘name’</SAMP>. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied <CODE>struct</CODE>. - -<DT><SAMP>‘%define initializer-suffix <VAR>initializers</VAR>’</SAMP> -<DD> -<A NAME="IDX14"></A> -This declaration is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -It permits to specify initializers for the structure members following -<VAR>slot-name</VAR> in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following <VAR>slot-name</VAR>. - -<DT><SAMP>‘%define hash-function-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX15"></A> -Allows you to specify the name for the generated hash function. Default -name is <SAMP>‘hash’</SAMP>. This option permits the use of two hash tables in -the same file. - -<DT><SAMP>‘%define lookup-function-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX16"></A> -Allows you to specify the name for the generated lookup function. -Default name is <SAMP>‘in_word_set’</SAMP>. This option permits multiple -generated hash functions to be used in the same application. - -<DT><SAMP>‘%define class-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX17"></A> -This option is only useful when option <SAMP>‘-L C++’</SAMP> (or, equivalently, -the <SAMP>‘%language=C++’</SAMP> declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -<CODE>Perfect_Hash</CODE>. - -<DT><SAMP>‘%7bit’</SAMP> -<DD> -<A NAME="IDX18"></A> -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions <CODE>isalnum</CODE> and <CODE>isgraph</CODE> do -<EM>not</EM> guarantee that a byte is in this range. Only an explicit -test like <SAMP>‘c >= 'A' && c <= 'Z'’</SAMP> guarantees this.) - -<DT><SAMP>‘%compare-lengths’</SAMP> -<DD> -<A NAME="IDX19"></A> -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section <A HREF="gperf.html#SEC15">4.3 Use of NUL bytes</A>). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via <CODE>strcmp</CODE>. -However, using <SAMP>‘%compare-lengths’</SAMP> might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option <SAMP>‘-S’</SAMP> or <SAMP>‘%switch’</SAMP> is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -<DT><SAMP>‘%compare-strncmp’</SAMP> -<DD> -<A NAME="IDX20"></A> -Generates C code that uses the <CODE>strncmp</CODE> function to perform -string comparisons. The default action is to use <CODE>strcmp</CODE>. - -<DT><SAMP>‘%readonly-tables’</SAMP> -<DD> -<A NAME="IDX21"></A> -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -<DT><SAMP>‘%enum’</SAMP> -<DD> -<A NAME="IDX22"></A> -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <CODE><jjc@ai.mit.edu></CODE>. - -<DT><SAMP>‘%includes’</SAMP> -<DD> -<A NAME="IDX23"></A> -Include the necessary system include file, <CODE><string.h></CODE>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -<DT><SAMP>‘%global-table’</SAMP> -<DD> -<A NAME="IDX24"></A> -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -<DT><SAMP>‘%pic’</SAMP> -<DD> -<A NAME="IDX25"></A> -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the <SAMP>‘%struct-type’</SAMP> declaration (or, -equivalently, the option <SAMP>‘-t’</SAMP>) is also given, the first field of the -user-defined struct must be of type <SAMP>‘int’</SAMP>, not <SAMP>‘char *’</SAMP>, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -<SAMP>‘stringpool + <VAR>o</VAR>’</SAMP>, where <VAR>o</VAR> is the offset. The string pool -name can be changed through the <SAMP>‘%define string-pool-name’</SAMP> declaration. - -<DT><SAMP>‘%define string-pool-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX26"></A> -Allows you to specify the name of the generated string pool created by -the declaration <SAMP>‘%pic’</SAMP> (or, equivalently, the option <SAMP>‘-P’</SAMP>). -The default name is <SAMP>‘stringpool’</SAMP>. This declaration permits the use of -two hash tables in the same file, with <SAMP>‘%pic’</SAMP> and even when the -<SAMP>‘%global-table’</SAMP> declaration (or, equivalently, the option <SAMP>‘-G’</SAMP>) -is given. - -<DT><SAMP>‘%null-strings’</SAMP> -<DD> -<A NAME="IDX27"></A> -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration <SAMP>‘%pic’</SAMP>), at the -expense of one more test-and-branch instruction at run time. - -<DT><SAMP>‘%define word-array-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX28"></A> -Allows you to specify the name for the generated array containing the -hash table. Default name is <SAMP>‘wordlist’</SAMP>. This option permits the -use of two hash tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘%define length-table-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX29"></A> -Allows you to specify the name for the generated array containing the -length table. Default name is <SAMP>‘lengthtable’</SAMP>. This option permits the -use of two length tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘%switch=<VAR>count</VAR>’</SAMP> -<DD> -<A NAME="IDX30"></A> -Causes the generated C code to use a <CODE>switch</CODE> statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many <CODE>switch</CODE> statements are generated. A -value of 1 generates 1 <CODE>switch</CODE> containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -<CODE>switch</CODE>, etc. This is useful since many C compilers cannot -correctly generate code for large <CODE>switch</CODE> statements. This option -was inspired in part by Keith Bostic's original C program. - -<DT><SAMP>‘%omit-struct-type’</SAMP> -<DD> -<A NAME="IDX31"></A> -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. -</DL> - - - -<H4><A NAME="SEC10" HREF="gperf.html#TOC10">4.1.1.3 C Code Inclusion</A></H4> - -<P> -<A NAME="IDX32"></A> -<A NAME="IDX33"></A> -Using a syntax similar to GNU utilities <CODE>flex</CODE> and <CODE>bison</CODE>, it -is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding <SAMP>‘%{’</SAMP>, <SAMP>‘%}’</SAMP> pairs. Here is -an input fragment based on the previous example that illustrates this -feature: - -</P> - -<PRE> -%{ -#include <assert.h> -/* This section of code is inserted directly into the output. */ -int return_month_days (struct month *months, int is_leap_year); -%} -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -... -</PRE> - - - -<H3><A NAME="SEC11" HREF="gperf.html#TOC11">4.1.2 Format for Keyword Entries</A></H3> - -<P> -The second input file format section contains lines of keywords and any -associated attributes you might supply. A line beginning with <SAMP>‘#’</SAMP> -in the first column is considered a comment. Everything following the -<SAMP>‘#’</SAMP> is ignored, up to and including the following newline. A line -beginning with <SAMP>‘%’</SAMP> in the first column is an option declaration and -must not occur within the keywords section. - -</P> -<P> -The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding -string quotation marks, or as a string enclosed in double-quotes, in -C syntax, possibly with backslash escapes like <CODE>\"</CODE> or <CODE>\234</CODE> -or <CODE>\xa8</CODE>. In either case, it must start right at the beginning -of the line, without leading whitespace. -In this context, a “field” is considered to extend up to, but -not include, the first blank, comma, or newline. Here is a simple -example taken from a partial list of C reserved words: - -</P> - -<PRE> -# These are a few C reserved words, see the c.gperf file -# for a complete list of ANSI C reserved words. -unsigned -sizeof -switch -signed -if -default -for -while -return -</PRE> - -<P> -Note that unlike <CODE>flex</CODE> or <CODE>bison</CODE> the first <SAMP>‘%%’</SAMP> marker -may be elided if the declaration section is empty. - -</P> -<P> -Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined <CODE>struct</CODE> provided by you in the -declaration section. If the <SAMP>‘-t’</SAMP> option (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) is <EM>not</EM> enabled -these fields are simply ignored. All previous examples except the last -one contain keyword attributes. - -</P> - - -<H3><A NAME="SEC12" HREF="gperf.html#TOC12">4.1.3 Including Additional C Functions</A></H3> - -<P> -The optional third section also corresponds closely with conventions -found in <CODE>flex</CODE> and <CODE>bison</CODE>. All text in this section, -starting at the final <SAMP>‘%%’</SAMP> and extending to the end of the input -file, is included verbatim into the generated output file. Naturally, -it is your responsibility to ensure that the code contained in this -section is valid C. - -</P> - - -<H3><A NAME="SEC13" HREF="gperf.html#TOC13">4.1.4 Where to place directives for GNU <CODE>indent</CODE>.</A></H3> - -<P> -If you want to invoke GNU <CODE>indent</CODE> on a <CODE>gperf</CODE> input file, -you will see that GNU <CODE>indent</CODE> doesn't understand the <SAMP>‘%%’</SAMP>, -<SAMP>‘%{’</SAMP> and <SAMP>‘%}’</SAMP> directives that control <CODE>gperf</CODE>'s -interpretation of the input file. Therefore you have to insert some -directives for GNU <CODE>indent</CODE>. More precisely, assuming the most -general input file structure - -</P> - -<PRE> -declarations part 1 -%{ -verbatim code -%} -declarations part 2 -%% -keywords -%% -functions -</PRE> - -<P> -you would insert <SAMP>‘*INDENT-OFF*’</SAMP> and <SAMP>‘*INDENT-ON*’</SAMP> comments -as follows: - -</P> - -<PRE> -/* *INDENT-OFF* */ -declarations part 1 -%{ -/* *INDENT-ON* */ -verbatim code -/* *INDENT-OFF* */ -%} -declarations part 2 -%% -keywords -%% -/* *INDENT-ON* */ -functions -</PRE> - - - -<H2><A NAME="SEC14" HREF="gperf.html#TOC14">4.2 Output Format for Generated C Code with <CODE>gperf</CODE></A></H2> -<P> -<A NAME="IDX34"></A> - -</P> -<P> -Several options control how the generated C code appears on the standard -output. Two C functions are generated. They are called <CODE>hash</CODE> and -<CODE>in_word_set</CODE>, although you may modify their names with a command-line -option. Both functions require two arguments, a string, <CODE>char *</CODE> -<VAR>str</VAR>, and a length parameter, <CODE>int</CODE> <VAR>len</VAR>. Their default -function prototypes are as follows: - -</P> -<P> -<DL> -<DT><U>Function:</U> unsigned int <B>hash</B> <I>(const char * <VAR>str</VAR>, unsigned int <VAR>len</VAR>)</I> -<DD><A NAME="IDX35"></A> -By default, the generated <CODE>hash</CODE> function returns an integer value -created by adding <VAR>len</VAR> to several user-specified <VAR>str</VAR> byte -positions indexed into an <EM>associated values</EM> table stored in a -local static array. The associated values table is constructed -internally by <CODE>gperf</CODE> and later output as a static local C array -called <SAMP>‘hash_table’</SAMP>. The relevant selected positions (i.e. indices -into <VAR>str</VAR>) are specified via the <SAMP>‘-k’</SAMP> option when running -<CODE>gperf</CODE>, as detailed in the <EM>Options</EM> section below (see section <A HREF="gperf.html#SEC17">5 Invoking <CODE>gperf</CODE></A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> <B>in_word_set</B> <I>(const char * <VAR>str</VAR>, unsigned int <VAR>len</VAR>)</I> -<DD><A NAME="IDX36"></A> -If <VAR>str</VAR> is in the keyword set, returns a pointer to that -keyword. More exactly, if the option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) was given, it returns -a pointer to the matching keyword's structure. Otherwise it returns -<CODE>NULL</CODE>. -</DL> - -</P> -<P> -If the option <SAMP>‘-c’</SAMP> (or, equivalently, the <SAMP>‘%compare-strncmp’</SAMP> -declaration) is not used, <VAR>str</VAR> must be a NUL terminated -string of exactly length <VAR>len</VAR>. If <SAMP>‘-c’</SAMP> (or, equivalently, the -<SAMP>‘%compare-strncmp’</SAMP> declaration) is used, <VAR>str</VAR> must -simply be an array of <VAR>len</VAR> bytes and does not need to be NUL -terminated. - -</P> -<P> -The code generated for these two functions is affected by the following -options: - -</P> -<DL COMPACT> - -<DT><SAMP>‘-t’</SAMP> -<DD> -<DT><SAMP>‘--struct-type’</SAMP> -<DD> -Make use of the user-defined <CODE>struct</CODE>. - -<DT><SAMP>‘-S <VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--switch=<VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<A NAME="IDX37"></A> -Generate 1 or more C <CODE>switch</CODE> statement rather than use a large, -(and potentially sparse) static array. Although the exact time and -space savings of this approach vary according to your C compiler's -degree of optimization, this method often results in smaller and faster -code. -</DL> - -<P> -If the <SAMP>‘-t’</SAMP> and <SAMP>‘-S’</SAMP> options (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> and <SAMP>‘%switch’</SAMP> declarations) are omitted, the default -action -is to generate a <CODE>char *</CODE> array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - -</P> - - -<H2><A NAME="SEC15" HREF="gperf.html#TOC15">4.3 Use of NUL bytes</A></H2> -<P> -<A NAME="IDX38"></A> - -</P> -<P> -By default, the code generated by <CODE>gperf</CODE> operates on zero -terminated strings, the usual representation of strings in C. This means -that the keywords in the input file must not contain NUL bytes, -and the <VAR>str</VAR> argument passed to <CODE>hash</CODE> or <CODE>in_word_set</CODE> -must be NUL terminated and have exactly length <VAR>len</VAR>. - -</P> -<P> -If option <SAMP>‘-c’</SAMP> (or, equivalently, the <SAMP>‘%compare-strncmp’</SAMP> -declaration) is used, then the <VAR>str</VAR> argument does not need -to be NUL terminated. The code generated by <CODE>gperf</CODE> will only -access the first <VAR>len</VAR>, not <VAR>len+1</VAR>, bytes starting at <VAR>str</VAR>. -However, the keywords in the input file still must not contain NUL -bytes. - -</P> -<P> -If option <SAMP>‘-l’</SAMP> (or, equivalently, the <SAMP>‘%compare-lengths’</SAMP> -declaration) is used, then the hash table performs binary -comparison. The keywords in the input file may contain NUL bytes, -written in string syntax as <CODE>\000</CODE> or <CODE>\x00</CODE>, and the code -generated by <CODE>gperf</CODE> will treat NUL like any other byte. -Also, in this case the <SAMP>‘-c’</SAMP> option (or, equivalently, the -<SAMP>‘%compare-strncmp’</SAMP> declaration) is ignored. - -</P> - - -<H2><A NAME="SEC16" HREF="gperf.html#TOC16">4.4 The Copyright of the Output</A></H2> -<P> -<A NAME="IDX39"></A> - -</P> -<P> -<CODE>gperf</CODE> is under GPL, but that does not cause the output produced -by <CODE>gperf</CODE> to be under GPL. The reason is that the output contains -only small pieces of text that come directly from <CODE>gperf</CODE>'s source -code -- only about 7 lines long, too small for being significant --, and -therefore the output is not a “work based on <CODE>gperf</CODE>” (in the -sense of the GPL version 3). - -</P> -<P> -On the other hand, the output produced by <CODE>gperf</CODE> contains -essentially all of the input file. Therefore the output is a -“derivative work” of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For most -software licenses, the result is that the the output is under the same -license, with the same copyright holder, as the input that was passed to -<CODE>gperf</CODE>. - -</P> - - -<H1><A NAME="SEC17" HREF="gperf.html#TOC17">5 Invoking <CODE>gperf</CODE></A></H1> - -<P> -There are <EM>many</EM> options to <CODE>gperf</CODE>. They were added to make -the program more convenient for use with real applications. “On-line” -help is readily available via the <SAMP>‘--help’</SAMP> option. Here is the -complete list of options. - -</P> - - - -<H2><A NAME="SEC18" HREF="gperf.html#TOC18">5.1 Specifying the Location of the Output File</A></H2> - -<DL COMPACT> - -<DT><SAMP>‘--output-file=<VAR>file</VAR>’</SAMP> -<DD> -Allows you to specify the name of the file to which the output is written to. -</DL> - -<P> -The results are written to standard output if no output file is specified -or if it is <SAMP>‘-’</SAMP>. - -</P> - - -<H2><A NAME="SEC19" HREF="gperf.html#TOC19">5.2 Options that affect Interpretation of the Input File</A></H2> - -<P> -These options are also available as declarations in the input file -(see section <A HREF="gperf.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-e <VAR>keyword-delimiter-list</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--delimiters=<VAR>keyword-delimiter-list</VAR>’</SAMP> -<DD> -<A NAME="IDX40"></A> -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. One useful trick is to use -e'TAB', where TAB is -the literal tab character. - -<DT><SAMP>‘-t’</SAMP> -<DD> -<DT><SAMP>‘--struct-type’</SAMP> -<DD> -Allows you to include a <CODE>struct</CODE> type declaration for generated -code. Any text before a pair of consecutive <SAMP>‘%%’</SAMP> is considered -part of the type declaration. Keywords and additional fields may follow -this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, -Modula 3 and JavaScript reserved words are distributed with this release. - -<DT><SAMP>‘--ignore-case’</SAMP> -<DD> -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. This option is therefore not -suitable if a properly internationalized or locale aware case mapping -should be used. (For example, in a Turkish locale, the upper case equivalent -of the lowercase ASCII letter <SAMP>‘i’</SAMP> is the non-ASCII character -<SAMP>‘capital i with dot above’</SAMP>.) For this case, it is better to apply -an uppercase or lowercase conversion on the string before passing it to -the <CODE>gperf</CODE> generated function. -</DL> - - - -<H2><A NAME="SEC20" HREF="gperf.html#TOC20">5.3 Options to specify the Language for the Output Code</A></H2> - -<P> -These options are also available as declarations in the input file -(see section <A HREF="gperf.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-L <VAR>generated-language-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--language=<VAR>generated-language-name</VAR>’</SAMP> -<DD> -Instructs <CODE>gperf</CODE> to generate code in the language specified by the -option's argument. Languages handled are currently: - -<DL COMPACT> - -<DT><SAMP>‘KR-C’</SAMP> -<DD> -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking <SAMP>‘const’</SAMP>. - -<DT><SAMP>‘C’</SAMP> -<DD> -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you <CODE>#define const</CODE> to empty -for compilers which don't know about this keyword. - -<DT><SAMP>‘ANSI-C’</SAMP> -<DD> -ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -<DT><SAMP>‘C++’</SAMP> -<DD> -C++. This language is understood by C++ compilers. -</DL> - -The default is ANSI-C. - -<DT><SAMP>‘-a’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. - -<DT><SAMP>‘-g’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. -</DL> - - - -<H2><A NAME="SEC21" HREF="gperf.html#TOC21">5.4 Options for fine tuning Details in the Output Code</A></H2> - -<P> -Most of these options are also available as declarations in the input file -(see section <A HREF="gperf.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-K <VAR>slot-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--slot-name=<VAR>slot-name</VAR>’</SAMP> -<DD> -<A NAME="IDX41"></A> -This option is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is <SAMP>‘name’</SAMP>. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied <CODE>struct</CODE>. - -<DT><SAMP>‘-F <VAR>initializers</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--initializer-suffix=<VAR>initializers</VAR>’</SAMP> -<DD> -<A NAME="IDX42"></A> -This option is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -It permits to specify initializers for the structure members following -<VAR>slot-name</VAR> in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following <VAR>slot-name</VAR>. - -<DT><SAMP>‘-H <VAR>hash-function-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--hash-function-name=<VAR>hash-function-name</VAR>’</SAMP> -<DD> -Allows you to specify the name for the generated hash function. Default -name is <SAMP>‘hash’</SAMP>. This option permits the use of two hash tables in -the same file. - -<DT><SAMP>‘-N <VAR>lookup-function-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--lookup-function-name=<VAR>lookup-function-name</VAR>’</SAMP> -<DD> -Allows you to specify the name for the generated lookup function. -Default name is <SAMP>‘in_word_set’</SAMP>. This option permits multiple -generated hash functions to be used in the same application. - -<DT><SAMP>‘-Z <VAR>class-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--class-name=<VAR>class-name</VAR>’</SAMP> -<DD> -<A NAME="IDX43"></A> -This option is only useful when option <SAMP>‘-L C++’</SAMP> (or, equivalently, -the <SAMP>‘%language=C++’</SAMP> declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -<CODE>Perfect_Hash</CODE>. - -<DT><SAMP>‘-7’</SAMP> -<DD> -<DT><SAMP>‘--seven-bit’</SAMP> -<DD> -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions <CODE>isalnum</CODE> and <CODE>isgraph</CODE> do -<EM>not</EM> guarantee that a byte is in this range. Only an explicit -test like <SAMP>‘c >= 'A' && c <= 'Z'’</SAMP> guarantees this.) This was the -default in versions of <CODE>gperf</CODE> earlier than 2.7; now the default is -to support 8-bit and multibyte characters. - -<DT><SAMP>‘-l’</SAMP> -<DD> -<DT><SAMP>‘--compare-lengths’</SAMP> -<DD> -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section <A HREF="gperf.html#SEC15">4.3 Use of NUL bytes</A>). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via <CODE>strcmp</CODE>. -However, using <SAMP>‘-l’</SAMP> might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option <SAMP>‘-S’</SAMP> or <SAMP>‘%switch’</SAMP> is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -<DT><SAMP>‘-c’</SAMP> -<DD> -<DT><SAMP>‘--compare-strncmp’</SAMP> -<DD> -Generates C code that uses the <CODE>strncmp</CODE> function to perform -string comparisons. The default action is to use <CODE>strcmp</CODE>. - -<DT><SAMP>‘-C’</SAMP> -<DD> -<DT><SAMP>‘--readonly-tables’</SAMP> -<DD> -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -<DT><SAMP>‘-E’</SAMP> -<DD> -<DT><SAMP>‘--enum’</SAMP> -<DD> -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <CODE><jjc@ai.mit.edu></CODE>. - -<DT><SAMP>‘-I’</SAMP> -<DD> -<DT><SAMP>‘--includes’</SAMP> -<DD> -Include the necessary system include file, <CODE><string.h></CODE>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -<DT><SAMP>‘-G’</SAMP> -<DD> -<DT><SAMP>‘--global-table’</SAMP> -<DD> -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -<DT><SAMP>‘-P’</SAMP> -<DD> -<DT><SAMP>‘--pic’</SAMP> -<DD> -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) is also given, the first field of the -user-defined struct must be of type <SAMP>‘int’</SAMP>, not <SAMP>‘char *’</SAMP>, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -<SAMP>‘stringpool + <VAR>o</VAR>’</SAMP>, where <VAR>o</VAR> is the offset. The string pool -name can be changed through the option <SAMP>‘--string-pool-name’</SAMP>. - -<DT><SAMP>‘-Q <VAR>string-pool-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--string-pool-name=<VAR>string-pool-name</VAR>’</SAMP> -<DD> -Allows you to specify the name of the generated string pool created by -option <SAMP>‘-P’</SAMP>. The default name is <SAMP>‘stringpool’</SAMP>. This option -permits the use of two hash tables in the same file, with <SAMP>‘-P’</SAMP> and -even when the option <SAMP>‘-G’</SAMP> (or, equivalently, the <SAMP>‘%global-table’</SAMP> -declaration) is given. - -<DT><SAMP>‘--null-strings’</SAMP> -<DD> -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option <SAMP>‘-P’</SAMP>), at the expense -of one more test-and-branch instruction at run time. - -<DT><SAMP>‘-W <VAR>hash-table-array-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--word-array-name=<VAR>hash-table-array-name</VAR>’</SAMP> -<DD> -<A NAME="IDX44"></A> -Allows you to specify the name for the generated array containing the -hash table. Default name is <SAMP>‘wordlist’</SAMP>. This option permits the -use of two hash tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘--length-table-name=<VAR>length-table-array-name</VAR>’</SAMP> -<DD> -<A NAME="IDX45"></A> -Allows you to specify the name for the generated array containing the -length table. Default name is <SAMP>‘lengthtable’</SAMP>. This option permits the -use of two length tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘-S <VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--switch=<VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<A NAME="IDX46"></A> -Causes the generated C code to use a <CODE>switch</CODE> statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many <CODE>switch</CODE> statements are generated. A -value of 1 generates 1 <CODE>switch</CODE> containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -<CODE>switch</CODE>, etc. This is useful since many C compilers cannot -correctly generate code for large <CODE>switch</CODE> statements. This option -was inspired in part by Keith Bostic's original C program. - -<DT><SAMP>‘-T’</SAMP> -<DD> -<DT><SAMP>‘--omit-struct-type’</SAMP> -<DD> -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. - -<DT><SAMP>‘-p’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. -</DL> - - - -<H2><A NAME="SEC22" HREF="gperf.html#TOC22">5.5 Options for changing the Algorithms employed by <CODE>gperf</CODE></A></H2> - -<DL COMPACT> - -<DT><SAMP>‘-k <VAR>selected-byte-positions</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--key-positions=<VAR>selected-byte-positions</VAR>’</SAMP> -<DD> -Allows selection of the byte positions used in the keywords' -hash function. The allowable choices range between 1-255, inclusive. -The positions are separated by commas, e.g., <SAMP>‘-k 9,4,13,14’</SAMP>; -ranges may be used, e.g., <SAMP>‘-k 2-7’</SAMP>; and positions may occur -in any order. Furthermore, the wildcard '*' causes the generated -hash function to consider <STRONG>all</STRONG> byte positions in each keyword, -whereas '$' instructs the hash function to use the “final byte” -of a keyword (this is the only way to use a byte position greater than -255, incidentally). - -For instance, the option <SAMP>‘-k 1,2,4,6-10,'$'’</SAMP> generates a hash -function that considers positions 1,2,4,6,7,8,9,10, plus the last -byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords -with length less than the indicated byte positions work properly, since -selected byte positions exceeding the keyword length are simply not -referenced in the hash function. - -This option is not normally needed since version 2.8 of <CODE>gperf</CODE>; -the default byte positions are computed depending on the keyword set, -through a search that minimizes the number of byte positions. - -<DT><SAMP>‘-D’</SAMP> -<DD> -<DT><SAMP>‘--duplicates’</SAMP> -<DD> -<A NAME="IDX47"></A> -Handle keywords whose selected byte sets hash to duplicate values. -Duplicate hash values can occur if a set of keywords has the same names, but -possesses different attributes, or if the selected byte positions are not well -chosen. With the -D option <CODE>gperf</CODE> treats all these keywords as -part of an equivalence class and generates a perfect hash function with -multiple comparisons for duplicate keywords. It is up to you to completely -disambiguate the keywords by modifying the generated C code. However, -<CODE>gperf</CODE> helps you out by organizing the output. - -Using this option usually means that the generated hash function is no -longer perfect. On the other hand, it permits <CODE>gperf</CODE> to work on -keyword sets that it otherwise could not handle. - -<DT><SAMP>‘-m <VAR>iterations</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--multiple-iterations=<VAR>iterations</VAR>’</SAMP> -<DD> -Perform multiple choices of the <SAMP>‘-i’</SAMP> and <SAMP>‘-j’</SAMP> values, and -choose the best results. This increases the running time by a factor of -<VAR>iterations</VAR> but does a good job minimizing the generated table size. - -<DT><SAMP>‘-i <VAR>initial-value</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--initial-asso=<VAR>initial-value</VAR>’</SAMP> -<DD> -Provides an initial <VAR>value</VAR> for the associate values array. Default -is 0. Increasing the initial value helps inflate the final table size, -possibly leading to more time efficient keyword lookups. Note that this -option is not particularly useful when <SAMP>‘-S’</SAMP> (or, equivalently, -<SAMP>‘%switch’</SAMP>) is used. Also, -<SAMP>‘-i’</SAMP> is overridden when the <SAMP>‘-r’</SAMP> option is used. - -<DT><SAMP>‘-j <VAR>jump-value</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--jump=<VAR>jump-value</VAR>’</SAMP> -<DD> -<A NAME="IDX48"></A> -Affects the “jump value”, i.e., how far to advance the associated -byte value upon collisions. <VAR>Jump-value</VAR> is rounded up to an -odd number, the default is 5. If the <VAR>jump-value</VAR> is 0 <CODE>gperf</CODE> -jumps by random amounts. - -<DT><SAMP>‘-n’</SAMP> -<DD> -<DT><SAMP>‘--no-strlen’</SAMP> -<DD> -Instructs the generator not to include the length of a keyword when -computing its hash value. This may save a few assembly instructions in -the generated lookup table. - -<DT><SAMP>‘-r’</SAMP> -<DD> -<DT><SAMP>‘--random’</SAMP> -<DD> -Utilizes randomness to initialize the associated values table. This -frequently generates solutions faster than using deterministic -initialization (which starts all associated values at 0). Furthermore, -using the randomization option generally increases the size of the -table. - -<DT><SAMP>‘-s <VAR>size-multiple</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--size-multiple=<VAR>size-multiple</VAR>’</SAMP> -<DD> -Affects the size of the generated hash table. The numeric argument for -this option indicates “how many times larger or smaller” the maximum -associated value range should be, in relationship to the number of keywords. -It can be written as an integer, a floating-point number or a fraction. -For example, a value of 3 means “allow the maximum associated value to be -about 3 times larger than the number of input keywords”. -Conversely, a value of 1/3 means “allow the maximum associated value to -be about 3 times smaller than the number of input keywords”. Values -smaller than 1 are useful for limiting the overall size of the generated hash -table, though the option <SAMP>‘-m’</SAMP> is better at this purpose. - -If `generate switch' option <SAMP>‘-S’</SAMP> (or, equivalently, <SAMP>‘%switch’</SAMP>) is -<EM>not</EM> enabled, the maximum -associated value influences the static array table size, and a larger -table should decrease the time required for an unsuccessful search, at -the expense of extra table space. - -The default value is 1, thus the default maximum associated value about -the same size as the number of keywords (for efficiency, the maximum -associated value is always rounded up to a power of 2). The actual -table size may vary somewhat, since this technique is essentially a -heuristic. -</DL> - - - -<H2><A NAME="SEC23" HREF="gperf.html#TOC23">5.6 Informative Output</A></H2> - -<DL COMPACT> - -<DT><SAMP>‘-h’</SAMP> -<DD> -<DT><SAMP>‘--help’</SAMP> -<DD> -Prints a short summary on the meaning of each program option. Aborts -further program execution. - -<DT><SAMP>‘-v’</SAMP> -<DD> -<DT><SAMP>‘--version’</SAMP> -<DD> -Prints out the current version number. - -<DT><SAMP>‘-d’</SAMP> -<DD> -<DT><SAMP>‘--debug’</SAMP> -<DD> -Enables the debugging option. This produces verbose diagnostics to -“standard error” when <CODE>gperf</CODE> is executing. It is useful both for -maintaining the program and for determining whether a given set of -options is actually speeding up the search for a solution. Some useful -information is dumped at the end of the program when the <SAMP>‘-d’</SAMP> -option is enabled. -</DL> - - - -<H1><A NAME="SEC24" HREF="gperf.html#TOC24">6 Known Bugs and Limitations with <CODE>gperf</CODE></A></H1> - -<P> -The following are some limitations with the current release of -<CODE>gperf</CODE>: - -</P> - -<UL> -<LI> - -The <CODE>gperf</CODE> utility is tuned to execute quickly, and works quickly -for small to medium size data sets (around 1000 keywords). It is -extremely useful for maintaining perfect hash functions for compiler -keyword sets. Several recent enhancements now enable <CODE>gperf</CODE> to -work efficiently on much larger keyword sets (over 15,000 keywords). -When processing large keyword sets it helps greatly to have over 8 megs -of RAM. - -<LI> - -The size of the generate static keyword array can get <EM>extremely</EM> -large if the input keyword file is large or if the keywords are quite -similar. This tends to slow down the compilation of the generated C -code, and <EM>greatly</EM> inflates the object code size. If this -situation occurs, consider using the <SAMP>‘-S’</SAMP> option to reduce data -size, potentially increasing keyword recognition time a negligible -amount. Since many C compilers cannot correctly generate code for -large switch statements it is important to qualify the <VAR>-S</VAR> option -with an appropriate numerical argument that controls the number of -switch statements generated. - -<LI> - -The maximum number of selected byte positions has an -arbitrary limit of 255. This restriction should be removed, and if -anyone considers this a problem write me and let me know so I can remove -the constraint. -</UL> - - - -<H1><A NAME="SEC25" HREF="gperf.html#TOC25">7 Things Still Left to Do</A></H1> - -<P> -It should be “relatively” easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - -</P> - -<UL> -<LI> - -Another useful extension involves modifying the program to generate -“minimal” perfect hash functions (under certain circumstances, the -current version can be rather extravagant in the generated table size). -This is mostly of theoretical interest, since a sparse table -often produces faster lookups, and use of the <SAMP>‘-S’</SAMP> <CODE>switch</CODE> -option can minimize the data size, at the expense of slightly longer -lookups (note that the gcc compiler generally produces good code for -<CODE>switch</CODE> statements, reducing the need for more complex schemes). - -<LI> - -In addition to improving the algorithm, it would also be useful to -generate an Ada package as the code output, in addition to the current -C and C++ routines. -</UL> - - - -<H1><A NAME="SEC26" HREF="gperf.html#TOC26">8 Bibliography</A></H1> - -<P> -[1] Chang, C.C.: <I>A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions</I> Information Sciences 39(1986), 187-195. - -</P> -<P> -[2] Cichelli, Richard J. <I>Author's Response to “On Cichelli's Minimal Perfect Hash -Functions Method”</I> Communications of the ACM, 23, 12(December 1980), 729. - -</P> -<P> -[3] Cichelli, Richard J. <I>Minimal Perfect Hash Functions Made Simple</I> -Communications of the ACM, 23, 1(January 1980), 17-19. - -</P> -<P> -[4] Cook, C. R. and Oldehoeft, R.R. <I>A Letter Oriented Minimal -Perfect Hashing Function</I> SIGPLAN Notices, 17, 9(September 1982), 18-27. - -</P> -<P> -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -<I>Practical Perfect Hashing</I> Computer Journal, 28, 1(January 1985), 54-58. - -</P> -<P> -[6] Jaeschke, G. <I>Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions</I> Communications of the ACM, 24, 12(December -1981), 829-833. - -</P> -<P> -[7] Jaeschke, G. and Osterburg, G. <I>On Cichelli's Minimal Perfect -Hash Functions Method</I> Communications of the ACM, 23, 12(December 1980), -728-729. - -</P> -<P> -[8] Sager, Thomas J. <I>A Polynomial Time Generator for Minimal Perfect -Hash Functions</I> Communications of the ACM, 28, 5(December 1985), 523-532 - -</P> -<P> -[9] Schmidt, Douglas C. <I>GPERF: A Perfect Hash Function Generator</I> -Second USENIX C++ Conference Proceedings, April 1990. - -</P> -<P> -[10] Schmidt, Douglas C. <I>GPERF: A Perfect Hash Function Generator</I> -C++ Report, SIGS 10 10 (November/December 1998). - -</P> -<P> -[11] Sebesta, R.W. and Taylor, M.A. <I>Minimal Perfect Hash Functions -for Reserved Word Lists</I> SIGPLAN Notices, 20, 12(September 1985), 47-53. - -</P> -<P> -[12] Sprugnoli, R. <I>Perfect Hashing Functions: A Single Probe -Retrieving Method for Static Sets</I> Communications of the ACM, 20 -11(November 1977), 841-850. - -</P> -<P> -[13] Stallman, Richard M. <I>Using and Porting GNU CC</I> Free Software Foundation, -1988. - -</P> -<P> -[14] Stroustrup, Bjarne <I>The C++ Programming Language.</I> Addison-Wesley, 1986. - -</P> -<P> -[15] Tiemann, Michael D. <I>User's Guide to GNU C++</I> Free Software -Foundation, 1989. - -</P> - - -<H1><A NAME="SEC27" HREF="gperf.html#TOC27">Concept Index</A></H1> - -<P> -Jump to: -<A HREF="#cindex_&">&</A> -- -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_b">b</A> -- -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_d">d</A> -- -<A HREF="#cindex_f">f</A> -- -<A HREF="#cindex_h">h</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_j">j</A> -- -<A HREF="#cindex_k">k</A> -- -<A HREF="#cindex_m">m</A> -- -<A HREF="#cindex_n">n</A> -- -<A HREF="#cindex_s">s</A> -<P> -<H2><A NAME="cindex_&">&</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX8"><SAMP>‘%%’</SAMP></A> -<LI><A HREF="gperf.html#IDX18"><SAMP>‘%7bit’</SAMP></A> -<LI><A HREF="gperf.html#IDX19"><SAMP>‘%compare-lengths’</SAMP></A> -<LI><A HREF="gperf.html#IDX20"><SAMP>‘%compare-strncmp’</SAMP></A> -<LI><A HREF="gperf.html#IDX17"><SAMP>‘%define class-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX15"><SAMP>‘%define hash-function-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX14"><SAMP>‘%define initializer-suffix’</SAMP></A> -<LI><A HREF="gperf.html#IDX29"><SAMP>‘%define length-table-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX16"><SAMP>‘%define lookup-function-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX13"><SAMP>‘%define slot-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX26"><SAMP>‘%define string-pool-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX28"><SAMP>‘%define word-array-name’</SAMP></A> -<LI><A HREF="gperf.html#IDX9"><SAMP>‘%delimiters’</SAMP></A> -<LI><A HREF="gperf.html#IDX22"><SAMP>‘%enum’</SAMP></A> -<LI><A HREF="gperf.html#IDX24"><SAMP>‘%global-table’</SAMP></A> -<LI><A HREF="gperf.html#IDX11"><SAMP>‘%ignore-case’</SAMP></A> -<LI><A HREF="gperf.html#IDX23"><SAMP>‘%includes’</SAMP></A> -<LI><A HREF="gperf.html#IDX12"><SAMP>‘%language’</SAMP></A> -<LI><A HREF="gperf.html#IDX27"><SAMP>‘%null-strings’</SAMP></A> -<LI><A HREF="gperf.html#IDX31"><SAMP>‘%omit-struct-type’</SAMP></A> -<LI><A HREF="gperf.html#IDX25"><SAMP>‘%pic’</SAMP></A> -<LI><A HREF="gperf.html#IDX21"><SAMP>‘%readonly-tables’</SAMP></A> -<LI><A HREF="gperf.html#IDX10"><SAMP>‘%struct-type’</SAMP></A> -<LI><A HREF="gperf.html#IDX30"><SAMP>‘%switch’</SAMP></A> -<LI><A HREF="gperf.html#IDX32"><SAMP>‘%{’</SAMP></A> -<LI><A HREF="gperf.html#IDX33"><SAMP>‘%}’</SAMP></A> -</DIR> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX44">Array name</A>, <A HREF="gperf.html#IDX45">Array name</A> -</DIR> -<H2><A NAME="cindex_b">b</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX1">Bugs</A> -</DIR> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX43">Class name</A> -<LI><A HREF="gperf.html#IDX39">Copyright</A> -</DIR> -<H2><A NAME="cindex_d">d</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX5">Declaration section</A> -<LI><A HREF="gperf.html#IDX40">Delimiters</A> -<LI><A HREF="gperf.html#IDX47">Duplicates</A> -</DIR> -<H2><A NAME="cindex_f">f</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX4">Format</A> -<LI><A HREF="gperf.html#IDX7">Functions section</A> -</DIR> -<H2><A NAME="cindex_h">h</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX35">hash</A> -<LI><A HREF="gperf.html#IDX34">hash table</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX36">in_word_set</A> -<LI><A HREF="gperf.html#IDX42">Initializers</A> -</DIR> -<H2><A NAME="cindex_j">j</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX48">Jump value</A> -</DIR> -<H2><A NAME="cindex_k">k</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX6">Keywords section</A> -</DIR> -<H2><A NAME="cindex_m">m</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX3">Minimal perfect hash functions</A> -</DIR> -<H2><A NAME="cindex_n">n</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX38">NUL</A> -</DIR> -<H2><A NAME="cindex_s">s</A></H2> -<DIR> -<LI><A HREF="gperf.html#IDX41">Slot name</A> -<LI><A HREF="gperf.html#IDX2">Static search structure</A> -<LI><A HREF="gperf.html#IDX37"><CODE>switch</CODE></A>, <A HREF="gperf.html#IDX46"><CODE>switch</CODE></A> -</DIR> - -</P> - -<P><HR><P> -This document was generated on 20 December 2009 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52b.</P> -</BODY> -</HTML> diff --git a/doc/gperf.info b/doc/gperf.info deleted file mode 100644 index 8353e43..0000000 --- a/doc/gperf.info +++ /dev/null @@ -1,2096 +0,0 @@ -This is gperf.info, produced by makeinfo version 4.13 from gperf.texi. - -INFO-DIR-SECTION Programming Tools -START-INFO-DIR-ENTRY -* Gperf: (gperf). Perfect Hash Function Generator. -END-INFO-DIR-ENTRY - - This file documents the features of the GNU Perfect Hash Function -Generator 3.1. - - Copyright (C) 1989-2009 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice are -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided also -that the section entitled "GNU General Public License" is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that the section entitled "GNU General Public License" -and this permission notice may be included in translations approved by -the Free Software Foundation instead of in the original English. - - -File: gperf.info, Node: Top, Next: Copying, Prev: (dir), Up: (dir) - -Introduction -************ - - This manual documents the GNU `gperf' perfect hash function generator -utility, focusing on its features and how to use them, and how to report -bugs. - -* Menu: - -* Copying:: GNU General Public License says how you can - copy and share `gperf'. -* Contributors:: People who have contributed to `gperf'. -* Motivation:: The purpose of `gperf'. -* Search Structures:: Static search structures and GNU `gperf' -* Description:: High-level discussion of how GPERF functions. -* Options:: A description of options to the program. -* Bugs:: Known bugs and limitations with GPERF. -* Projects:: Things still left to do. -* Bibliography:: Material Referenced in this Report. - -* Concept Index:: - - -High-Level Description of GNU `gperf' - -* Input Format:: Input Format to `gperf' -* Output Format:: Output Format for Generated C Code with `gperf' -* Binary Strings:: Use of NUL bytes -* Output Copyright:: The Copyright of the Output. - -Input Format to `gperf' - -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU `indent'. - -Declarations - -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. - -Invoking `gperf' - -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by `gperf' -* Verbosity:: Informative Output - - -File: gperf.info, Node: Copying, Next: Contributors, Prev: Top, Up: Top - -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'. - - -File: gperf.info, Node: Contributors, Next: Motivation, Prev: Copying, Up: Top - -Contributors to GNU `gperf' Utility -*********************************** - - * The GNU `gperf' perfect hash function generator utility was - written in GNU C++ by Douglas C. Schmidt. The general idea for - the perfect hash function generator was inspired by Keith Bostic's - algorithm written in C, and distributed to net.sources around - 1984. The current program is a heavily modified, enhanced, and - extended implementation of Keith's basic idea, created at the - University of California, Irvine. Bugs, patches, and suggestions - should be reported to `<bug-gnu-gperf@gnu.org>'. - - * Special thanks is extended to Michael Tiemann and Doug Lea, for - providing a useful compiler, and for giving me a forum to exhibit - my creation. - - In addition, Adam de Boor and Nels Olson provided many tips and - insights that greatly helped improve the quality and functionality - of `gperf'. - - * Bruno Haible enhanced and optimized the search algorithm. He also - rewrote the input routines and the output routines for better - reliability, and added a testsuite. - - -File: gperf.info, Node: Motivation, Next: Search Structures, Prev: Contributors, Up: Top - -1 Introduction -************** - - `gperf' is a perfect hash function generator written in C++. It -transforms an N element user-specified keyword set W into a perfect -hash function F. F uniquely maps keywords in W onto the range 0..K, -where K >= N-1. If K = N-1 then F is a _minimal_ perfect hash function. -`gperf' generates a 0..K element static lookup table and a pair of C -functions. These functions determine whether a given character string -S occurs in W, using at most one probe into the lookup table. - - `gperf' currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU -Pascal, GNU Modula 3, and GNU indent. Complete C++ source code for -`gperf' is available from `http://ftp.gnu.org/pub/gnu/gperf/'. A paper -describing `gperf''s design and implementation in greater detail is -available in the Second USENIX C++ Conference proceedings or from -`http://www.cs.wustl.edu/~schmidt/resume.html'. - - -File: gperf.info, Node: Search Structures, Next: Description, Prev: Motivation, Up: Top - -2 Static search structures and GNU `gperf' -****************************************** - - A "static search structure" is an Abstract Data Type with certain -fundamental operations, e.g., _initialize_, _insert_, and _retrieve_. -Conceptually, all insertions occur before any retrievals. In practice, -`gperf' generates a _static_ array containing search set keywords and -any associated attributes specified by the user. Thus, there is -essentially no execution-time cost for the insertions. It is a useful -data structure for representing _static search sets_. Static search -sets occur frequently in software system applications. Typical static -search sets include compiler reserved words, assembler instruction -opcodes, and built-in shell interpreter commands. Search set members, -called "keywords", are inserted into the structure only once, usually -during program initialization, and are not generally modified at -run-time. - - Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an N element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is proportional -to log N. Conversely, hash table implementations often locate a table -entry in constant time, but typically impose additional memory overhead -and exhibit poor worst case performance. - - _Minimal perfect hash functions_ provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - - * It allows keyword recognition in a static search set using at most - _one_ probe into the hash table. This represents the "perfect" - property. - - * The actual memory allocated to store the keywords is precisely - large enough for the keyword set, and _no larger_. This is the - "minimal" property. - - For most applications it is far easier to generate _perfect_ hash -functions than _minimal perfect_ hash functions. Moreover, non-minimal -perfect hash functions frequently execute faster than minimal ones in -practice. This phenomena occurs since searching a sparse keyword table -increases the probability of locating a "null" entry, thereby reducing -string comparisons. `gperf''s default behavior generates -_near-minimal_ perfect hash functions for keyword sets. However, -`gperf' provides many options that permit user control over the degree -of minimality and perfection. - - Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure _once_, if it subsequently -receives heavy use multiple times. `gperf' removes the drudgery -associated with constructing time- and space-efficient search -structures by hand. It has proven a useful and practical tool for -serious programming projects. Output from `gperf' is currently used in -several production and research compilers, including GNU C, GNU C++, -GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -`gperf' to automatically generate static search structures that -efficiently identify their respective reserved keywords. - - -File: gperf.info, Node: Description, Next: Options, Prev: Search Structures, Up: Top - -3 High-Level Description of GNU `gperf' -*************************************** - -* Menu: - -* Input Format:: Input Format to `gperf' -* Output Format:: Output Format for Generated C Code with `gperf' -* Binary Strings:: Use of NUL bytes -* Output Copyright:: The Copyright of the Output. - - The perfect hash function generator `gperf' reads a set of -"keywords" from an input file (or from the standard input by default). -It attempts to derive a perfect hashing function that recognizes a -member of the "static keyword set" with at most a single probe into the -lookup table. If `gperf' succeeds in generating such a function it -produces a pair of C source code routines that perform hashing and -table lookup recognition. All generated C code is directed to the -standard output. Command-line options described below allow you to -modify the input and output format to `gperf'. - - By default, `gperf' attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct `gperf' to utilize a C `switch' statement -scheme that minimizes data space storage size. Furthermore, using a C -`switch' may actually speed up the keyword retrieval time somewhat. -Actual results depend on your C compiler, of course. - - In general, `gperf' assigns values to the bytes it is using for -hashing until some set of values gives each keyword a unique value. A -helpful heuristic is that the larger the hash value range, the easier -it is for `gperf' to find and generate a perfect hash function. -Experimentation is the key to getting the most from `gperf'. - - -File: gperf.info, Node: Input Format, Next: Output Format, Prev: Description, Up: Description - -3.1 Input Format to `gperf' -=========================== - - You can control the input file format by varying certain command-line -arguments, in particular the `-t' option. The input's appearance is -similar to GNU utilities `flex' and `bison' (or UNIX utilities `lex' -and `yacc'). Here's an outline of the general format: - - declarations - %% - keywords - %% - functions - - _Unlike_ `flex' or `bison', the declarations section and the -functions section are optional. The following sections describe the -input format for each section. - -* Menu: - -* Declarations:: Declarations. -* Keywords:: Format for Keyword Entries. -* Functions:: Including Additional C Functions. -* Controls for GNU indent:: Where to place directives for GNU `indent'. - - It is possible to omit the declaration section entirely, if the `-t' -option is not given. In this case the input file begins directly with -the first keyword line, e.g.: - - january - february - march - april - ... - - -File: gperf.info, Node: Declarations, Next: Keywords, Prev: Input Format, Up: Input Format - -3.1.1 Declarations ------------------- - - The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, `gperf' declarations that act -like command-line options, as well as for providing a user-supplied -`struct'. - -* Menu: - -* User-supplied Struct:: Specifying keywords with attributes. -* Gperf Declarations:: Embedding command line options in the input. -* C Code Inclusion:: Including C declarations and definitions. - - -File: gperf.info, Node: User-supplied Struct, Next: Gperf Declarations, Prev: Declarations, Up: Declarations - -3.1.1.1 User-supplied `struct' -.............................. - - If the `-t' option (or, equivalently, the `%struct-type' declaration) -_is_ enabled, you _must_ provide a C `struct' as the last component in -the declaration section from the input file. The first field in this -struct must be of type `char *' or `const char *' if the `-P' option is -not given, or of type `int' if the option `-P' (or, equivalently, the -`%pic' declaration) is enabled. This first field must be called -`name', although it is possible to modify its name with the `-K' option -(or, equivalently, the `%define slot-name' declaration) described below. - - Here is a simple example, using months of the year and their -attributes as input: - - struct month { char *name; int number; int days; int leap_days; }; - %% - january, 1, 31, 31 - february, 2, 28, 29 - march, 3, 31, 31 - april, 4, 30, 30 - may, 5, 31, 31 - june, 6, 30, 30 - july, 7, 31, 31 - august, 8, 31, 31 - september, 9, 30, 30 - october, 10, 31, 31 - november, 11, 30, 30 - december, 12, 31, 31 - - Separating the `struct' declaration from the list of keywords and -other fields are a pair of consecutive percent signs, `%%', appearing -left justified in the first column, as in the UNIX utility `lex'. - - If the `struct' has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - - struct month; - %% - january, 1, 31, 31 - ... - - -File: gperf.info, Node: Gperf Declarations, Next: C Code Inclusion, Prev: User-supplied Struct, Up: Declarations - -3.1.1.2 Gperf Declarations -.......................... - - The declaration section can contain `gperf' declarations. They -influence the way `gperf' works, like command line options do. In -fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - - 1. Declarations without argument, like `%compare-lengths'. - - 2. Declarations with an argument, like `%switch=COUNT'. - - 3. Declarations of names of entities in the output file, like - `%define lookup-function-name NAME'. - - When a declaration is given both in the input file and as a command -line option, the command-line option's value prevails. - - The following `gperf' declarations are available. - -`%delimiters=DELIMITER-LIST' - Allows you to provide a string containing delimiters used to - separate keywords from their attributes. The default is ",". This - option is essential if you want to use keywords that have embedded - commas or newlines. - -`%struct-type' - Allows you to include a `struct' type declaration for generated - code; see above for an example. - -`%ignore-case' - Consider upper and lower case ASCII characters as equivalent. The - string comparison will use a case insignificant character - comparison. Note that locale dependent case mappings are ignored. - -`%language=LANGUAGE-NAME' - Instructs `gperf' to generate code in the language specified by the - option's argument. Languages handled are currently: - - `KR-C' - Old-style K&R C. This language is understood by old-style C - compilers and ANSI C compilers, but ANSI C compilers may flag - warnings (or even errors) because of lacking `const'. - - `C' - Common C. This language is understood by ANSI C compilers, - and also by old-style C compilers, provided that you `#define - const' to empty for compilers which don't know about this - keyword. - - `ANSI-C' - ANSI C. This language is understood by ANSI C (C89, ISO C90) - compilers, ISO C99 compilers, and C++ compilers. - - `C++' - C++. This language is understood by C++ compilers. - - The default is ANSI-C. - -`%define slot-name NAME' - This declaration is only useful when option `-t' (or, - equivalently, the `%struct-type' declaration) has been given. By - default, the program assumes the structure component identifier for - the keyword is `name'. This option allows an arbitrary choice of - identifier for this component, although it still must occur as the - first field in your supplied `struct'. - -`%define initializer-suffix INITIALIZERS' - This declaration is only useful when option `-t' (or, - equivalently, the `%struct-type' declaration) has been given. It - permits to specify initializers for the structure members following - SLOT-NAME in empty hash table entries. The list of initializers - should start with a comma. By default, the emitted code will - zero-initialize structure members following SLOT-NAME. - -`%define hash-function-name NAME' - Allows you to specify the name for the generated hash function. - Default name is `hash'. This option permits the use of two hash - tables in the same file. - -`%define lookup-function-name NAME' - Allows you to specify the name for the generated lookup function. - Default name is `in_word_set'. This option permits multiple - generated hash functions to be used in the same application. - -`%define class-name NAME' - This option is only useful when option `-L C++' (or, equivalently, - the `%language=C++' declaration) has been given. It allows you to - specify the name of generated C++ class. Default name is - `Perfect_Hash'. - -`%7bit' - This option specifies that all strings that will be passed as - arguments to the generated hash function and the generated lookup - function will solely consist of 7-bit ASCII characters (bytes in - the range 0..127). (Note that the ANSI C functions `isalnum' and - `isgraph' do _not_ guarantee that a byte is in this range. Only - an explicit test like `c >= 'A' && c <= 'Z'' guarantees this.) - -`%compare-lengths' - Compare keyword lengths before trying a string comparison. This - option is mandatory for binary comparisons (*note Binary - Strings::). It also might cut down on the number of string - comparisons made during the lookup, since keywords with different - lengths are never compared via `strcmp'. However, using - `%compare-lengths' might greatly increase the size of the - generated C code if the lookup table range is large (which implies - that the switch option `-S' or `%switch' is not enabled), since - the length table contains as many elements as there are entries in - the lookup table. - -`%compare-strncmp' - Generates C code that uses the `strncmp' function to perform - string comparisons. The default action is to use `strcmp'. - -`%readonly-tables' - Makes the contents of all generated lookup tables constant, i.e., - "readonly". Many compilers can generate more efficient code for - this by putting the tables in readonly memory. - -`%enum' - Define constant values using an enum local to the lookup function - rather than with #defines. This also means that different lookup - functions can reside in the same file. Thanks to James Clark - `<jjc@ai.mit.edu>'. - -`%includes' - Include the necessary system include file, `<string.h>', at the - beginning of the code. By default, this is not done; the user must - include this header file himself to allow compilation of the code. - -`%global-table' - Generate the static table of keywords as a static global variable, - rather than hiding it inside of the lookup function (which is the - default behavior). - -`%pic' - Optimize the generated table for inclusion in shared libraries. - This reduces the startup time of programs using a shared library - containing the generated code. If the `%struct-type' declaration - (or, equivalently, the option `-t') is also given, the first field - of the user-defined struct must be of type `int', not `char *', - because it will contain offsets into the string pool instead of - actual strings. To convert such an offset to a string, you can - use the expression `stringpool + O', where O is the offset. The - string pool name can be changed through the `%define - string-pool-name' declaration. - -`%define string-pool-name NAME' - Allows you to specify the name of the generated string pool - created by the declaration `%pic' (or, equivalently, the option - `-P'). The default name is `stringpool'. This declaration - permits the use of two hash tables in the same file, with `%pic' - and even when the `%global-table' declaration (or, equivalently, - the option `-G') is given. - -`%null-strings' - Use NULL strings instead of empty strings for empty keyword table - entries. This reduces the startup time of programs using a shared - library containing the generated code (but not as much as the - declaration `%pic'), at the expense of one more test-and-branch - instruction at run time. - -`%define word-array-name NAME' - Allows you to specify the name for the generated array containing - the hash table. Default name is `wordlist'. This option permits - the use of two hash tables in the same file, even when the option - `-G' (or, equivalently, the `%global-table' declaration) is given. - -`%define length-table-name NAME' - Allows you to specify the name for the generated array containing - the length table. Default name is `lengthtable'. This option - permits the use of two length tables in the same file, even when - the option `-G' (or, equivalently, the `%global-table' - declaration) is given. - -`%switch=COUNT' - Causes the generated C code to use a `switch' statement scheme, - rather than an array lookup table. This can lead to a reduction - in both time and space requirements for some input files. The - argument to this option determines how many `switch' statements - are generated. A value of 1 generates 1 `switch' containing all - the elements, a value of 2 generates 2 tables with 1/2 the - elements in each `switch', etc. This is useful since many C - compilers cannot correctly generate code for large `switch' - statements. This option was inspired in part by Keith Bostic's - original C program. - -`%omit-struct-type' - Prevents the transfer of the type declaration to the output file. - Use this option if the type is already defined elsewhere. - - -File: gperf.info, Node: C Code Inclusion, Prev: Gperf Declarations, Up: Declarations - -3.1.1.3 C Code Inclusion -........................ - - Using a syntax similar to GNU utilities `flex' and `bison', it is -possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding `%{', `%}' pairs. Here is an input -fragment based on the previous example that illustrates this feature: - - %{ - #include <assert.h> - /* This section of code is inserted directly into the output. */ - int return_month_days (struct month *months, int is_leap_year); - %} - struct month { char *name; int number; int days; int leap_days; }; - %% - january, 1, 31, 31 - february, 2, 28, 29 - march, 3, 31, 31 - ... - - -File: gperf.info, Node: Keywords, Next: Functions, Prev: Declarations, Up: Input Format - -3.1.2 Format for Keyword Entries --------------------------------- - - The second input file format section contains lines of keywords and -any associated attributes you might supply. A line beginning with `#' -in the first column is considered a comment. Everything following the -`#' is ignored, up to and including the following newline. A line -beginning with `%' in the first column is an option declaration and -must not occur within the keywords section. - - The first field of each non-comment line is always the keyword -itself. It can be given in two ways: as a simple name, i.e., without -surrounding string quotation marks, or as a string enclosed in -double-quotes, in C syntax, possibly with backslash escapes like `\"' -or `\234' or `\xa8'. In either case, it must start right at the -beginning of the line, without leading whitespace. In this context, a -"field" is considered to extend up to, but not include, the first -blank, comma, or newline. Here is a simple example taken from a -partial list of C reserved words: - - # These are a few C reserved words, see the c.gperf file - # for a complete list of ANSI C reserved words. - unsigned - sizeof - switch - signed - if - default - for - while - return - - Note that unlike `flex' or `bison' the first `%%' marker may be -elided if the declaration section is empty. - - Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined `struct' provided by you in the -declaration section. If the `-t' option (or, equivalently, the -`%struct-type' declaration) is _not_ enabled these fields are simply -ignored. All previous examples except the last one contain keyword -attributes. - - -File: gperf.info, Node: Functions, Next: Controls for GNU indent, Prev: Keywords, Up: Input Format - -3.1.3 Including Additional C Functions --------------------------------------- - - The optional third section also corresponds closely with conventions -found in `flex' and `bison'. All text in this section, starting at the -final `%%' and extending to the end of the input file, is included -verbatim into the generated output file. Naturally, it is your -responsibility to ensure that the code contained in this section is -valid C. - - -File: gperf.info, Node: Controls for GNU indent, Prev: Functions, Up: Input Format - -3.1.4 Where to place directives for GNU `indent'. -------------------------------------------------- - - If you want to invoke GNU `indent' on a `gperf' input file, you will -see that GNU `indent' doesn't understand the `%%', `%{' and `%}' -directives that control `gperf''s interpretation of the input file. -Therefore you have to insert some directives for GNU `indent'. More -precisely, assuming the most general input file structure - - declarations part 1 - %{ - verbatim code - %} - declarations part 2 - %% - keywords - %% - functions - -you would insert `*INDENT-OFF*' and `*INDENT-ON*' comments as follows: - - /* *INDENT-OFF* */ - declarations part 1 - %{ - /* *INDENT-ON* */ - verbatim code - /* *INDENT-OFF* */ - %} - declarations part 2 - %% - keywords - %% - /* *INDENT-ON* */ - functions - - -File: gperf.info, Node: Output Format, Next: Binary Strings, Prev: Input Format, Up: Description - -3.2 Output Format for Generated C Code with `gperf' -=================================================== - - Several options control how the generated C code appears on the -standard output. Two C functions are generated. They are called -`hash' and `in_word_set', although you may modify their names with a -command-line option. Both functions require two arguments, a string, -`char *' STR, and a length parameter, `int' LEN. Their default -function prototypes are as follows: - - -- Function: unsigned int hash (const char * STR, unsigned int LEN) - By default, the generated `hash' function returns an integer value - created by adding LEN to several user-specified STR byte positions - indexed into an "associated values" table stored in a local static - array. The associated values table is constructed internally by - `gperf' and later output as a static local C array called - `hash_table'. The relevant selected positions (i.e. indices into - STR) are specified via the `-k' option when running `gperf', as - detailed in the _Options_ section below (*note Options::). - - -- Function: in_word_set (const char * STR, unsigned int LEN) - If STR is in the keyword set, returns a pointer to that keyword. - More exactly, if the option `-t' (or, equivalently, the - `%struct-type' declaration) was given, it returns a pointer to the - matching keyword's structure. Otherwise it returns `NULL'. - - If the option `-c' (or, equivalently, the `%compare-strncmp' -declaration) is not used, STR must be a NUL terminated string of -exactly length LEN. If `-c' (or, equivalently, the `%compare-strncmp' -declaration) is used, STR must simply be an array of LEN bytes and does -not need to be NUL terminated. - - The code generated for these two functions is affected by the -following options: - -`-t' -`--struct-type' - Make use of the user-defined `struct'. - -`-S TOTAL-SWITCH-STATEMENTS' -`--switch=TOTAL-SWITCH-STATEMENTS' - Generate 1 or more C `switch' statement rather than use a large, - (and potentially sparse) static array. Although the exact time and - space savings of this approach vary according to your C compiler's - degree of optimization, this method often results in smaller and - faster code. - - If the `-t' and `-S' options (or, equivalently, the `%struct-type' -and `%switch' declarations) are omitted, the default action is to -generate a `char *' array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - - -File: gperf.info, Node: Binary Strings, Next: Output Copyright, Prev: Output Format, Up: Description - -3.3 Use of NUL bytes -==================== - - By default, the code generated by `gperf' operates on zero -terminated strings, the usual representation of strings in C. This -means that the keywords in the input file must not contain NUL bytes, -and the STR argument passed to `hash' or `in_word_set' must be NUL -terminated and have exactly length LEN. - - If option `-c' (or, equivalently, the `%compare-strncmp' -declaration) is used, then the STR argument does not need to be NUL -terminated. The code generated by `gperf' will only access the first -LEN, not LEN+1, bytes starting at STR. However, the keywords in the -input file still must not contain NUL bytes. - - If option `-l' (or, equivalently, the `%compare-lengths' -declaration) is used, then the hash table performs binary comparison. -The keywords in the input file may contain NUL bytes, written in string -syntax as `\000' or `\x00', and the code generated by `gperf' will -treat NUL like any other byte. Also, in this case the `-c' option (or, -equivalently, the `%compare-strncmp' declaration) is ignored. - - -File: gperf.info, Node: Output Copyright, Prev: Binary Strings, Up: Description - -3.4 The Copyright of the Output -=============================== - - `gperf' is under GPL, but that does not cause the output produced by -`gperf' to be under GPL. The reason is that the output contains only -small pieces of text that come directly from `gperf''s source code - -only about 7 lines long, too small for being significant -, and -therefore the output is not a "work based on `gperf'" (in the sense of -the GPL version 3). - - On the other hand, the output produced by `gperf' contains -essentially all of the input file. Therefore the output is a -"derivative work" of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For -most software licenses, the result is that the the output is under the -same license, with the same copyright holder, as the input that was -passed to `gperf'. - - -File: gperf.info, Node: Options, Next: Bugs, Prev: Description, Up: Top - -4 Invoking `gperf' -****************** - - There are _many_ options to `gperf'. They were added to make the -program more convenient for use with real applications. "On-line" help -is readily available via the `--help' option. Here is the complete -list of options. - -* Menu: - -* Output File:: Specifying the Location of the Output File -* Input Details:: Options that affect Interpretation of the Input File -* Output Language:: Specifying the Language for the Output Code -* Output Details:: Fine tuning Details in the Output Code -* Algorithmic Details:: Changing the Algorithms employed by `gperf' -* Verbosity:: Informative Output - - -File: gperf.info, Node: Output File, Next: Input Details, Prev: Options, Up: Options - -4.1 Specifying the Location of the Output File -============================================== - -`--output-file=FILE' - Allows you to specify the name of the file to which the output is - written to. - - The results are written to standard output if no output file is -specified or if it is `-'. - - -File: gperf.info, Node: Input Details, Next: Output Language, Prev: Output File, Up: Options - -4.2 Options that affect Interpretation of the Input File -======================================================== - - These options are also available as declarations in the input file -(*note Gperf Declarations::). - -`-e KEYWORD-DELIMITER-LIST' -`--delimiters=KEYWORD-DELIMITER-LIST' - Allows you to provide a string containing delimiters used to - separate keywords from their attributes. The default is ",". This - option is essential if you want to use keywords that have embedded - commas or newlines. One useful trick is to use -e'TAB', where TAB - is the literal tab character. - -`-t' -`--struct-type' - Allows you to include a `struct' type declaration for generated - code. Any text before a pair of consecutive `%%' is considered - part of the type declaration. Keywords and additional fields may - follow this, one group of fields per line. A set of examples for - generating perfect hash tables and functions for Ada, C, C++, - Pascal, Modula 2, Modula 3 and JavaScript reserved words are - distributed with this release. - -`--ignore-case' - Consider upper and lower case ASCII characters as equivalent. The - string comparison will use a case insignificant character - comparison. Note that locale dependent case mappings are ignored. - This option is therefore not suitable if a properly - internationalized or locale aware case mapping should be used. - (For example, in a Turkish locale, the upper case equivalent of - the lowercase ASCII letter `i' is the non-ASCII character `capital - i with dot above'.) For this case, it is better to apply an - uppercase or lowercase conversion on the string before passing it - to the `gperf' generated function. - - -File: gperf.info, Node: Output Language, Next: Output Details, Prev: Input Details, Up: Options - -4.3 Options to specify the Language for the Output Code -======================================================= - - These options are also available as declarations in the input file -(*note Gperf Declarations::). - -`-L GENERATED-LANGUAGE-NAME' -`--language=GENERATED-LANGUAGE-NAME' - Instructs `gperf' to generate code in the language specified by the - option's argument. Languages handled are currently: - - `KR-C' - Old-style K&R C. This language is understood by old-style C - compilers and ANSI C compilers, but ANSI C compilers may flag - warnings (or even errors) because of lacking `const'. - - `C' - Common C. This language is understood by ANSI C compilers, - and also by old-style C compilers, provided that you `#define - const' to empty for compilers which don't know about this - keyword. - - `ANSI-C' - ANSI C. This language is understood by ANSI C compilers and - C++ compilers. - - `C++' - C++. This language is understood by C++ compilers. - - The default is ANSI-C. - -`-a' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - -`-g' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - - -File: gperf.info, Node: Output Details, Next: Algorithmic Details, Prev: Output Language, Up: Options - -4.4 Options for fine tuning Details in the Output Code -====================================================== - - Most of these options are also available as declarations in the -input file (*note Gperf Declarations::). - -`-K SLOT-NAME' -`--slot-name=SLOT-NAME' - This option is only useful when option `-t' (or, equivalently, the - `%struct-type' declaration) has been given. By default, the - program assumes the structure component identifier for the keyword - is `name'. This option allows an arbitrary choice of identifier - for this component, although it still must occur as the first - field in your supplied `struct'. - -`-F INITIALIZERS' -`--initializer-suffix=INITIALIZERS' - This option is only useful when option `-t' (or, equivalently, the - `%struct-type' declaration) has been given. It permits to specify - initializers for the structure members following SLOT-NAME in - empty hash table entries. The list of initializers should start - with a comma. By default, the emitted code will zero-initialize - structure members following SLOT-NAME. - -`-H HASH-FUNCTION-NAME' -`--hash-function-name=HASH-FUNCTION-NAME' - Allows you to specify the name for the generated hash function. - Default name is `hash'. This option permits the use of two hash - tables in the same file. - -`-N LOOKUP-FUNCTION-NAME' -`--lookup-function-name=LOOKUP-FUNCTION-NAME' - Allows you to specify the name for the generated lookup function. - Default name is `in_word_set'. This option permits multiple - generated hash functions to be used in the same application. - -`-Z CLASS-NAME' -`--class-name=CLASS-NAME' - This option is only useful when option `-L C++' (or, equivalently, - the `%language=C++' declaration) has been given. It allows you to - specify the name of generated C++ class. Default name is - `Perfect_Hash'. - -`-7' -`--seven-bit' - This option specifies that all strings that will be passed as - arguments to the generated hash function and the generated lookup - function will solely consist of 7-bit ASCII characters (bytes in - the range 0..127). (Note that the ANSI C functions `isalnum' and - `isgraph' do _not_ guarantee that a byte is in this range. Only - an explicit test like `c >= 'A' && c <= 'Z'' guarantees this.) - This was the default in versions of `gperf' earlier than 2.7; now - the default is to support 8-bit and multibyte characters. - -`-l' -`--compare-lengths' - Compare keyword lengths before trying a string comparison. This - option is mandatory for binary comparisons (*note Binary - Strings::). It also might cut down on the number of string - comparisons made during the lookup, since keywords with different - lengths are never compared via `strcmp'. However, using `-l' - might greatly increase the size of the generated C code if the - lookup table range is large (which implies that the switch option - `-S' or `%switch' is not enabled), since the length table contains - as many elements as there are entries in the lookup table. - -`-c' -`--compare-strncmp' - Generates C code that uses the `strncmp' function to perform - string comparisons. The default action is to use `strcmp'. - -`-C' -`--readonly-tables' - Makes the contents of all generated lookup tables constant, i.e., - "readonly". Many compilers can generate more efficient code for - this by putting the tables in readonly memory. - -`-E' -`--enum' - Define constant values using an enum local to the lookup function - rather than with #defines. This also means that different lookup - functions can reside in the same file. Thanks to James Clark - `<jjc@ai.mit.edu>'. - -`-I' -`--includes' - Include the necessary system include file, `<string.h>', at the - beginning of the code. By default, this is not done; the user must - include this header file himself to allow compilation of the code. - -`-G' -`--global-table' - Generate the static table of keywords as a static global variable, - rather than hiding it inside of the lookup function (which is the - default behavior). - -`-P' -`--pic' - Optimize the generated table for inclusion in shared libraries. - This reduces the startup time of programs using a shared library - containing the generated code. If the option `-t' (or, - equivalently, the `%struct-type' declaration) is also given, the - first field of the user-defined struct must be of type `int', not - `char *', because it will contain offsets into the string pool - instead of actual strings. To convert such an offset to a string, - you can use the expression `stringpool + O', where O is the - offset. The string pool name can be changed through the option - `--string-pool-name'. - -`-Q STRING-POOL-NAME' -`--string-pool-name=STRING-POOL-NAME' - Allows you to specify the name of the generated string pool - created by option `-P'. The default name is `stringpool'. This - option permits the use of two hash tables in the same file, with - `-P' and even when the option `-G' (or, equivalently, the - `%global-table' declaration) is given. - -`--null-strings' - Use NULL strings instead of empty strings for empty keyword table - entries. This reduces the startup time of programs using a shared - library containing the generated code (but not as much as option - `-P'), at the expense of one more test-and-branch instruction at - run time. - -`-W HASH-TABLE-ARRAY-NAME' -`--word-array-name=HASH-TABLE-ARRAY-NAME' - Allows you to specify the name for the generated array containing - the hash table. Default name is `wordlist'. This option permits - the use of two hash tables in the same file, even when the option - `-G' (or, equivalently, the `%global-table' declaration) is given. - -`--length-table-name=LENGTH-TABLE-ARRAY-NAME' - Allows you to specify the name for the generated array containing - the length table. Default name is `lengthtable'. This option - permits the use of two length tables in the same file, even when - the option `-G' (or, equivalently, the `%global-table' - declaration) is given. - -`-S TOTAL-SWITCH-STATEMENTS' -`--switch=TOTAL-SWITCH-STATEMENTS' - Causes the generated C code to use a `switch' statement scheme, - rather than an array lookup table. This can lead to a reduction - in both time and space requirements for some input files. The - argument to this option determines how many `switch' statements - are generated. A value of 1 generates 1 `switch' containing all - the elements, a value of 2 generates 2 tables with 1/2 the - elements in each `switch', etc. This is useful since many C - compilers cannot correctly generate code for large `switch' - statements. This option was inspired in part by Keith Bostic's - original C program. - -`-T' -`--omit-struct-type' - Prevents the transfer of the type declaration to the output file. - Use this option if the type is already defined elsewhere. - -`-p' - This option is supported for compatibility with previous releases - of `gperf'. It does not do anything. - - -File: gperf.info, Node: Algorithmic Details, Next: Verbosity, Prev: Output Details, Up: Options - -4.5 Options for changing the Algorithms employed by `gperf' -=========================================================== - -`-k SELECTED-BYTE-POSITIONS' -`--key-positions=SELECTED-BYTE-POSITIONS' - Allows selection of the byte positions used in the keywords' hash - function. The allowable choices range between 1-255, inclusive. - The positions are separated by commas, e.g., `-k 9,4,13,14'; - ranges may be used, e.g., `-k 2-7'; and positions may occur in any - order. Furthermore, the wildcard '*' causes the generated hash - function to consider *all* byte positions in each keyword, whereas - '$' instructs the hash function to use the "final byte" of a - keyword (this is the only way to use a byte position greater than - 255, incidentally). - - For instance, the option `-k 1,2,4,6-10,'$'' generates a hash - function that considers positions 1,2,4,6,7,8,9,10, plus the last - byte in each keyword (which may be at a different position for each - keyword, obviously). Keywords with length less than the indicated - byte positions work properly, since selected byte positions - exceeding the keyword length are simply not referenced in the hash - function. - - This option is not normally needed since version 2.8 of `gperf'; - the default byte positions are computed depending on the keyword - set, through a search that minimizes the number of byte positions. - -`-D' -`--duplicates' - Handle keywords whose selected byte sets hash to duplicate values. - Duplicate hash values can occur if a set of keywords has the same - names, but possesses different attributes, or if the selected byte - positions are not well chosen. With the -D option `gperf' treats - all these keywords as part of an equivalence class and generates a - perfect hash function with multiple comparisons for duplicate - keywords. It is up to you to completely disambiguate the keywords - by modifying the generated C code. However, `gperf' helps you out - by organizing the output. - - Using this option usually means that the generated hash function - is no longer perfect. On the other hand, it permits `gperf' to - work on keyword sets that it otherwise could not handle. - -`-m ITERATIONS' -`--multiple-iterations=ITERATIONS' - Perform multiple choices of the `-i' and `-j' values, and choose - the best results. This increases the running time by a factor of - ITERATIONS but does a good job minimizing the generated table size. - -`-i INITIAL-VALUE' -`--initial-asso=INITIAL-VALUE' - Provides an initial VALUE for the associate values array. Default - is 0. Increasing the initial value helps inflate the final table - size, possibly leading to more time efficient keyword lookups. - Note that this option is not particularly useful when `-S' (or, - equivalently, `%switch') is used. Also, `-i' is overridden when - the `-r' option is used. - -`-j JUMP-VALUE' -`--jump=JUMP-VALUE' - Affects the "jump value", i.e., how far to advance the associated - byte value upon collisions. JUMP-VALUE is rounded up to an odd - number, the default is 5. If the JUMP-VALUE is 0 `gperf' jumps by - random amounts. - -`-n' -`--no-strlen' - Instructs the generator not to include the length of a keyword when - computing its hash value. This may save a few assembly - instructions in the generated lookup table. - -`-r' -`--random' - Utilizes randomness to initialize the associated values table. - This frequently generates solutions faster than using deterministic - initialization (which starts all associated values at 0). - Furthermore, using the randomization option generally increases - the size of the table. - -`-s SIZE-MULTIPLE' -`--size-multiple=SIZE-MULTIPLE' - Affects the size of the generated hash table. The numeric - argument for this option indicates "how many times larger or - smaller" the maximum associated value range should be, in - relationship to the number of keywords. It can be written as an - integer, a floating-point number or a fraction. For example, a - value of 3 means "allow the maximum associated value to be about 3 - times larger than the number of input keywords". Conversely, a - value of 1/3 means "allow the maximum associated value to be about - 3 times smaller than the number of input keywords". Values - smaller than 1 are useful for limiting the overall size of the - generated hash table, though the option `-m' is better at this - purpose. - - If `generate switch' option `-S' (or, equivalently, `%switch') is - _not_ enabled, the maximum associated value influences the static - array table size, and a larger table should decrease the time - required for an unsuccessful search, at the expense of extra table - space. - - The default value is 1, thus the default maximum associated value - about the same size as the number of keywords (for efficiency, the - maximum associated value is always rounded up to a power of 2). - The actual table size may vary somewhat, since this technique is - essentially a heuristic. - - -File: gperf.info, Node: Verbosity, Prev: Algorithmic Details, Up: Options - -4.6 Informative Output -====================== - -`-h' -`--help' - Prints a short summary on the meaning of each program option. - Aborts further program execution. - -`-v' -`--version' - Prints out the current version number. - -`-d' -`--debug' - Enables the debugging option. This produces verbose diagnostics to - "standard error" when `gperf' is executing. It is useful both for - maintaining the program and for determining whether a given set of - options is actually speeding up the search for a solution. Some - useful information is dumped at the end of the program when the - `-d' option is enabled. - - -File: gperf.info, Node: Bugs, Next: Projects, Prev: Options, Up: Top - -5 Known Bugs and Limitations with `gperf' -***************************************** - - The following are some limitations with the current release of -`gperf': - - * The `gperf' utility is tuned to execute quickly, and works quickly - for small to medium size data sets (around 1000 keywords). It is - extremely useful for maintaining perfect hash functions for - compiler keyword sets. Several recent enhancements now enable - `gperf' to work efficiently on much larger keyword sets (over - 15,000 keywords). When processing large keyword sets it helps - greatly to have over 8 megs of RAM. - - * The size of the generate static keyword array can get _extremely_ - large if the input keyword file is large or if the keywords are - quite similar. This tends to slow down the compilation of the - generated C code, and _greatly_ inflates the object code size. If - this situation occurs, consider using the `-S' option to reduce - data size, potentially increasing keyword recognition time a - negligible amount. Since many C compilers cannot correctly - generate code for large switch statements it is important to - qualify the -S option with an appropriate numerical argument that - controls the number of switch statements generated. - - * The maximum number of selected byte positions has an arbitrary - limit of 255. This restriction should be removed, and if anyone - considers this a problem write me and let me know so I can remove - the constraint. - - -File: gperf.info, Node: Projects, Next: Bibliography, Prev: Bugs, Up: Top - -6 Things Still Left to Do -************************* - - It should be "relatively" easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - - * Another useful extension involves modifying the program to generate - "minimal" perfect hash functions (under certain circumstances, the - current version can be rather extravagant in the generated table - size). This is mostly of theoretical interest, since a sparse - table often produces faster lookups, and use of the `-S' `switch' - option can minimize the data size, at the expense of slightly - longer lookups (note that the gcc compiler generally produces good - code for `switch' statements, reducing the need for more complex - schemes). - - * In addition to improving the algorithm, it would also be useful to - generate an Ada package as the code output, in addition to the - current C and C++ routines. - - -File: gperf.info, Node: Bibliography, Next: Concept Index, Prev: Projects, Up: Top - -7 Bibliography -************** - -[1] Chang, C.C.: A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions Information Sciences 39(1986), 187-195. - -[2] Cichelli, Richard J. Author's Response to "On Cichelli's Minimal -Perfect Hash Functions Method" Communications of the ACM, 23, -12(December 1980), 729. - -[3] Cichelli, Richard J. Minimal Perfect Hash Functions Made Simple -Communications of the ACM, 23, 1(January 1980), 17-19. - -[4] Cook, C. R. and Oldehoeft, R.R. A Letter Oriented Minimal Perfect -Hashing Function SIGPLAN Notices, 17, 9(September 1982), 18-27. - -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -Practical Perfect Hashing Computer Journal, 28, 1(January 1985), 54-58. - -[6] Jaeschke, G. Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions Communications of the ACM, 24, 12(December -1981), 829-833. - -[7] Jaeschke, G. and Osterburg, G. On Cichelli's Minimal Perfect Hash -Functions Method Communications of the ACM, 23, 12(December 1980), -728-729. - -[8] Sager, Thomas J. A Polynomial Time Generator for Minimal Perfect -Hash Functions Communications of the ACM, 28, 5(December 1985), 523-532 - -[9] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator Second -USENIX C++ Conference Proceedings, April 1990. - -[10] Schmidt, Douglas C. GPERF: A Perfect Hash Function Generator C++ -Report, SIGS 10 10 (November/December 1998). - -[11] Sebesta, R.W. and Taylor, M.A. Minimal Perfect Hash Functions for -Reserved Word Lists SIGPLAN Notices, 20, 12(September 1985), 47-53. - -[12] Sprugnoli, R. Perfect Hashing Functions: A Single Probe Retrieving -Method for Static Sets Communications of the ACM, 20 11(November 1977), -841-850. - -[13] Stallman, Richard M. Using and Porting GNU CC Free Software -Foundation, 1988. - -[14] Stroustrup, Bjarne The C++ Programming Language. Addison-Wesley, -1986. - -[15] Tiemann, Michael D. User's Guide to GNU C++ Free Software -Foundation, 1989. - - -File: gperf.info, Node: Concept Index, Prev: Bibliography, Up: Top - -Concept Index -************* - - -* Menu: - -* %%: User-supplied Struct. - (line 33) -* %7bit: Gperf Declarations. (line 95) -* %compare-lengths: Gperf Declarations. (line 103) -* %compare-strncmp: Gperf Declarations. (line 115) -* %define class-name: Gperf Declarations. (line 89) -* %define hash-function-name: Gperf Declarations. (line 79) -* %define initializer-suffix: Gperf Declarations. (line 71) -* %define length-table-name: Gperf Declarations. (line 173) -* %define lookup-function-name: Gperf Declarations. (line 84) -* %define slot-name: Gperf Declarations. (line 63) -* %define string-pool-name: Gperf Declarations. (line 152) -* %define word-array-name: Gperf Declarations. (line 167) -* %delimiters: Gperf Declarations. (line 24) -* %enum: Gperf Declarations. (line 124) -* %global-table: Gperf Declarations. (line 135) -* %ignore-case: Gperf Declarations. (line 34) -* %includes: Gperf Declarations. (line 130) -* %language: Gperf Declarations. (line 39) -* %null-strings: Gperf Declarations. (line 160) -* %omit-struct-type: Gperf Declarations. (line 192) -* %pic: Gperf Declarations. (line 140) -* %readonly-tables: Gperf Declarations. (line 119) -* %struct-type: Gperf Declarations. (line 30) -* %switch: Gperf Declarations. (line 180) -* %{: C Code Inclusion. (line 6) -* %}: C Code Inclusion. (line 6) -* Array name: Output Details. (line 129) -* Bugs: Contributors. (line 6) -* Class name: Output Details. (line 41) -* Copyright: Output Copyright. (line 6) -* Declaration section: Input Format. (line 6) -* Delimiters: Input Details. (line 11) -* Duplicates: Algorithmic Details. (line 32) -* Format: Input Format. (line 6) -* Functions section: Input Format. (line 6) -* hash: Output Format. (line 14) -* hash table: Output Format. (line 6) -* in_word_set: Output Format. (line 24) -* Initializers: Output Details. (line 20) -* Jump value: Algorithmic Details. (line 63) -* Keywords section: Input Format. (line 6) -* Minimal perfect hash functions: Search Structures. (line 30) -* NUL: Binary Strings. (line 6) -* Slot name: Output Details. (line 11) -* Static search structure: Search Structures. (line 6) -* switch <1>: Output Details. (line 143) -* switch: Output Format. (line 44) - - - -Tag Table: -Node: Top1235 -Node: Copying3372 -Node: Contributors40913 -Node: Motivation42106 -Node: Search Structures43238 -Node: Description46797 -Node: Input Format48755 -Node: Declarations49900 -Node: User-supplied Struct50488 -Node: Gperf Declarations52103 -Node: C Code Inclusion60900 -Node: Keywords61743 -Node: Functions63691 -Node: Controls for GNU indent64229 -Node: Output Format65180 -Node: Binary Strings67975 -Node: Output Copyright69151 -Node: Options70090 -Node: Output File70879 -Node: Input Details71271 -Node: Output Language73110 -Node: Output Details74534 -Node: Algorithmic Details81801 -Node: Verbosity87058 -Node: Bugs87769 -Node: Projects89365 -Node: Bibliography90497 -Node: Concept Index92512 - -End Tag Table diff --git a/doc/gperf.pdf b/doc/gperf.pdf Binary files differdeleted file mode 100644 index edf3b90..0000000 --- a/doc/gperf.pdf +++ /dev/null diff --git a/doc/gperf.ps b/doc/gperf.ps deleted file mode 100644 index 3b36de0..0000000 --- a/doc/gperf.ps +++ /dev/null @@ -1,6348 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.96 Copyright 2005 Radical Eye Software -%%Title: ./gperf.dvi -%%CreationDate: Sun Dec 20 11:01:54 2009 -%%Pages: 37 -%%PageOrder: Ascend -%%BoundingBox: 0 0 595 843 -%%DocumentFonts: CMBX12 CMTT12 CMR10 CMSY10 CMTT10 CMSLTT10 CMTT9 CMSL10 -%%+ CMTI10 CMSS10 CMB10 CMR9 CMMI9 CMMI12 CMMI10 -%%DocumentPaperSizes: a4 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D600 -o gperf.ps ./gperf.dvi -%DVIPSParameters: dpi=600 -%DVIPSSource: TeX output 2009.12.20:1101 -%%BeginProcSet: tex.pro 0 0 -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S -/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy -setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask -restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -%%BeginProcSet: texps.pro 0 0 -%! -TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 -index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll -exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 -ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ -pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get -div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type -/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end -definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup -sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll -mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ -exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} -forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def -end - -%%EndProcSet -%%BeginFont: CMMI10 -%!PS-AdobeFont-1.1: CMMI10 1.100 -%%CreationDate: 1996 Jul 23 07:53:57 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMMI10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 58 /period put -readonly def -/FontBBox{-32 -250 1048 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 -9E394A533A081C36D456A09920001A3D2199583EB9B84B4DEE08E3D12939E321 -990CD249827D9648574955F61BAAA11263A91B6C3D47A5190165B0C25ABF6D3E -6EC187E4B05182126BB0D0323D943170B795255260F9FD25F2248D04F45DFBFB -DEF7FF8B19BFEF637B210018AE02572B389B3F76282BEB29CC301905D388C721 -59616893E774413F48DE0B408BC66DCE3FE17CB9F84D205839D58014D6A88823 -D9320AE93AF96D97A02C4D5A2BB2B8C7925C4578003959C46E3CE1A2F0EAC4BF -8B9B325E46435BDE60BC54D72BC8ACB5C0A34413AC87045DC7B84646A324B808 -6FD8E34217213E131C3B1510415CE45420688ED9C1D27890EC68BD7C1235FAF9 -1DAB3A369DD2FC3BE5CF9655C7B7EDA7361D7E05E5831B6B8E2EEC542A7B38EE -03BE4BAC6079D038ACB3C7C916279764547C2D51976BABA94BA9866D79F13909 -95AA39B0F03103A07CBDF441B8C5669F729020AF284B7FF52A29C6255FCAACF1 -74109050FBA2602E72593FBCBFC26E726EE4AEF97B7632BC4F5F353B5C67FED2 -3EA752A4A57B8F7FEFF1D7341D895F0A3A0BE1D8E3391970457A967EFF84F6D8 -47750B1145B8CC5BD96EE7AA99DDC9E06939E383BDA41175233D58AD263EBF19 -AFC0E2F840512D321166547B306C592B8A01E1FA2564B9A26DAC14256414E4C8 -42616728D918C74D13C349F4186EC7B9708B86467425A6FDB3A396562F7EE4D8 -40B43621744CF8A23A6E532649B66C2A0002DD04F8F39618E4F572819DD34837 -B5A08E643FDCA1505AF6A1FA3DDFD1FA758013CAED8ACDDBBB334D664DFF5B53 -9560176676ABB71BBD0EE56B4CC492C0652750227CEC6CBEEE374709231B00CD -0DE83AFDE295B314F6C8B1FFD32251C1925D96A64D739FF1DA4926460B28B3DE -E949AA0BA3DDB16534FBA30C32092D5F712B5E8C8D5142F35AF2906E6C219D2C -7FD9A368C193E0EB9C7E25FF03C546B6ED993F964CEDB1B8537C617170787F37 -88D6F2AD02384B01067FE3F98257BAB958BB3BCD1001090A4502DA0638080EC6 -DB784CC8AC37CDC01B29BC481D6A05ADC6188785262358C1BF1D694BBF31C1F1 -AF117C1ACED44AAC6EB4B9A2511A6762DDE8FCCBA5 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMMI12 -%!PS-AdobeFont-1.1: CMMI12 1.100 -%%CreationDate: 1996 Jul 27 08:57:55 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMMI12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 58 /period put -readonly def -/FontBBox{-30 -250 1026 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D6A8F05B47AF95EF28A9C561DBDC98C47CF5 -5250011D19E9366EB6FD153D3A100CAA6212E3D5D93990737F8D326D347B7EDC -4391C9DF440285B8FC159D0E98D4258FC57892DCC57F7903449E07914FBE9E67 -3C15C2153C061EB541F66C11E7EE77D5D77C0B11E1AC55101DA976CCACAB6993 -EED1406FBB7FF30EAC9E90B90B2AF4EC7C273CA32F11A5C1426FF641B4A2FB2F -4E68635C93DB835737567FAF8471CBC05078DCD4E40E25A2F4E5AF46C234CF59 -2A1CE8F39E1BA1B2A594355637E474167EAD4D97D51AF0A899B44387E1FD933A -323AFDA6BA740534A510B4705C0A15647AFBF3E53A82BF320DD96753639BE49C -2F79A1988863EF977B800C9DB5B42039C23EB86953713F730E03EA22FF7BB2C1 -D97D33FD77B1BDCC2A60B12CF7805CFC90C5B914C0F30A673DF9587F93E47CEA -5932DD1930560C4F0D97547BCD805D6D854455B13A4D7382A22F562D7C55041F -0FD294BDAA1834820F894265A667E5C97D95FF152531EF97258F56374502865D -A1E7C0C5FB7C6FB7D3C43FEB3431095A59FBF6F61CEC6D6DEE09F4EB0FD70D77 -2A8B0A4984C6120293F6B947944BE23259F6EB64303D627353163B6505FC8A60 -00681F7A3968B6CBB49E0420A691258F5E7B07B417157803FCBE9B9FB1F80FD8 -CA0DA1186446DD565542BCCC7D339A1EB34C7F49246E8D72E987EB477C6DB757 -99AF86CEBCD7605C487A00CD2CD093098182DC57B20D78ECE0BECF3A0BF88EBA -C866DB19F34BBBED6634AFC0F08D2AFB2A92578A6F8B4ADCD6594737FF6EED7D -5B536DA9E3E2CADB40DB7C600EA4D100D33C3B92B1CF857E012C4EB370BA8295 -55B50047CC8911C98FE1A7BA6CDEA82D34476286E710776823690AD333DD3A49 -335002F4680DBE1C21174BF016B0DF799B01EB9D6988479A8334BBA2F8DC7146 -BC0DAE9DE3A6453B181808E68A89E0C02DAC6264D002B422EBC1CF14F65D9888 -15EE6D514D3457F7F3C6A3D17EE1DA076F73ECC392D349174DA9E4680F29CE10 -0157E42CA35F5DBFF56BFC3AA07E61A78DBE882C5AB388220C19750D3643E7C8 -23D6673027CE568A4ACCE1D12B1D9E5A43507F4AF9BC873237F65A6B95078DD2 -378007CF0F0DE7CCEF760E19D6D1D7B412EC5D4972 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMMI9 -%!PS-AdobeFont-1.1: CMMI9 1.100 -%%CreationDate: 1996 Jul 23 07:53:55 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI9) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMMI9 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 58 /period put -readonly def -/FontBBox{-29 -250 1075 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 -9E394A533A081C36D6F5CA5FED4F9AC9ADE41E04F9FC52E758C9F45A92BED935 -86F9CFDB57732045913A6422AD4206418610C81D882EE493DE9523CC1BFE1505 -DD1390B19BC1947A01B93BC668BE9B2A0E69A968554239B88C00AF9FBDF09CCD -67D3B2094C11A04762FE8CC1E91D020A28B3C122D24BEAACF82313F4604F2FEF -6E176D730A879BE45DD0D4996EF0247AEB1CA0AB08FF374D99F06D47B36F9554 -FAD9A2D3CE451B7791C3709D8A1DDDEFBD840C1B42AB824D5A0DFF0E0F15B0B7 -22AEEB877FF489581DA6FA8DA64944555101EB16F7AB0B717E148B7B98D8DBFD -730C52937E226545CF8DC3E07C5BA30739BAFCD0F2B44275A6D503F582C0FB4F -449963D0AD2FAFDE33BA3D77BCA9D1DF878DDAFCA2E22CC4BACD542B282164C7 -97C2BDE318AF9D501CA21F6E662E7AAB75A5F24D2C182E598D175D44E88AB19A -E7CD59584F95B389183EE21B525BF52A3F23C0FE5383A5565A19361D716F508C -AAB78411CA5A4D27552CC1C435760D5A89D535B71C593E755C616661363308DA -A683F54ED0C23FB2C225A008392B0B719F66F11A946A090B7C00B662A3C69599 -B4ECB0CC70C85C4BBBF207E0026F6C7A19F2ACFB7A60804FC98A4BFFD7BFFF2B -9529E6D9D4238002BBC255BC62959D6F3381FE06E0621B879D5FE5B541D45A1E -759A6E7DC32B1D1632368D09A97039DF255B6492B1B2B7E2C1434E8306ECA7D3 -5A79B6D614B4979F10988BC76ED53A5F45315CD7DA216221F842FD0F3E050DD2 -BAC23C984D506D8F7D614BCB6B244F5F41321549BB0BD041FBF3053307168680 -3435E9C9445A59A7C666418C4F2512C32058B1CE1EA46C7839C6E372F6CC60AE -2CF46DD2F130B532DE8ECD42D9204500E413799E298CF6426F28D23BB7216BEA -1A618B3ECC61B44DDEF0BB22D640B47C09AC0DF378CE68FC9CD88BDAE9ED89CB -431A5CF9C3E9528FEE7A9936C2B1CF7B38DD2B95773F0EA0051607BE1B0B3588 -A8B907A5EF011B4622C5093A7B107DD1EED6FEE9536DECF1CC96E65373D0F433 -30AE3C094654ABF4698C07F8C74E71D023DFD242EE83B1306786124DD8C6BFA7 -801E66CB944BE7EBCB3FE803EC97067AF7AFC8A4E9AC9D11 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMR9 -%!PS-AdobeFont-1.1: CMR9 1.0 -%%CreationDate: 1991 Aug 20 16:39:59 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMR9) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMR9 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 39 /quoteright put -dup 44 /comma put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 70 /F put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 83 /S put -dup 85 /U put -dup 96 /quoteleft put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 121 /y put -dup 122 /z put -readonly def -/FontBBox{-39 -250 1036 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 -87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F -D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 -92A36FADB679CF58BAFDD3E51DFDD314B91A605515D729EE20C42505FD4E0835 -3C9D365B14C003BC6DD352F0228A8C161F172D2551CD1C67CD0B1B21DED53203 -046FAFF9B1129167921DD82C5964F9DDDFE0D2686875BD075FC81831A941F20E -C5CD90040A092E559F6D1D3B0E9BB71733595AE0EA6093F986377A96060BF12A -A1B525CD9FA741FE051DD54A32BECD55A868DD63119A4370F8322CCBEC889BC2 -A723CB4015FC4AA90AE873EA14DE13382CA9CF0D8DFB65F0ABEDFD9A64BB3F4D -731E2E1C9A1789228FF44116230A70C339C9819676022AB31B5C9C589AE9094B -09882051AD4637C1710D93E8DD117B4E7B478493B91EA6306FDB3FA6D738AAB1 -49FBB21A00AC2A999C21445DE3177F21D8B6AAB33869C882613EA6B5EC56476B -5634181ECBF03BFEDB57F079EACE3B334F6F384BDF9D70AEBD592C8ECF21378B -54A8B5DBF7CB9282E16AA517E14843909339B5E7C55B038BF3BB493F3B884A1C -C25F9E8FB912CBE23199AD9D2C3E573727701BA301526C66C3617B9514D6F11F -11930B1D97C17816C85B1BFD9B973A191B33CC3B391815AD14F1CBE935942AEC -D4004E6BEF379066FD72209DC88D2E634E79BCC2B98C766CBD92C561F2703F8A -109E6C6CEC7B866F2FC7ADF646BF492E520319F3B949AB5D84AE990B33344A40 -3971F58DFDF8D8D67FA0B8F2A0D884F8C09A5A721319B911DBA0A35903877343 -C37BC36C5EB32353272D1E6ED5FCA611BE319A7E1E842CB7576E7A66D8E9C810 -49CCC0D35AE00D3669EC7D8ED957EEB2105BDCF7408E0B04A325495D38BCE845 -E96329244411EAAC14D3ABDD2BECAD7D391ADFFE3F7565B14FD29737EAAED3C0 -7F3981DDBE07D4AC09F6C1A32369BB88852CCE980C1E950E27EF3CF8A840B393 -9792FC1A510BCB4A2976BB640EE4510EA2BA3C7B5FE02F5F0F845B6B00F617FD -EB4655CED34B0097F22329071DE7738CA994BD0F983C5C4599AB9161F3776023 -9AB724F231D9C38A76FC8F6A2DD4E6C9FD2B8061CDC814442CC69E94D437AC78 -B2DB204A99A3240E1123E0568F6EDFE11586FD1056FD547B7CC477D8D32796D8 -A37A1D4F89A6371F302C421EB4279D560D645BE186DC504CA606DE1EBCE98358 -0B8C800A25D76755E1006164AED015712653A9EF8DB0B980E8A2E6D30E9CA40B -433989DAF8A217D2A70E1F2C2B994615FB279E30AAF8B978895F1CADD9259DFE -03DBC2D65ABBC25560ECAD7F743FCCBDA16EB8AEEDD091BF1DF8339DF57DCDF6 -7CF63057040C0FD028EDE603C19448D1CA4AE12B15DCA284FB786B144A2D7E8A -82ED6CC0CC8A43E5CBB660231928EAD80834F2F58311DB3FAC75D071A496C3D6 -24AEEB63CA0697CABD7A59C526C125E26701094960851D4EEC73E4D03E2A3B63 -0518DE30A8D56C4CE6C892A4CD61371739DED0C95474D1DEDDDA5C83480C8023 -B3CC77CA3D2DAB88A020873D02EF2B242555140A908FD857F37F704FCE3A45E9 -E2D02C68F689F4692664CB4C60225D7D19A2A3D88A7F2CEA66BFE06F3D9CF622 -676E384A983406A25F80588F1BEA3CE41AED345303458308C476FDA857E053C9 -E17D561BCA03FB7C35D8134C01E2209F2A9B8D25529DE43CB6EF0AC872C99C79 -CB7D9144577C4F939B4B2D8F93543543A4161B8209D38CF073963A78A305D9AC -7A9F3BC2350D3455BE94CADFC7F4BC01EFE76BCA10F3F35930BEBADED4F650A6 -71452586A3C29A644F2F25BDE14053F5CBFBE26454589967297FB9791D108832 -3585A2F66A42E75B3DD5B1536E457F5DC3EAF69C3C5E8ACF4F32BB5118F503D7 -8D328212074424E6B2E83BD26E73B0FFE3957D5CE744067A12229451A17082E8 -E7AA765FCE539C3CB34D5185F381894C074AC30E906773F2FF25689E488309E5 -28B3121DBB2466B3A07DD8119635F5AA790DD87A29F1E0184F9B811DBFD9988C -5E7C698AADBA838F81D63F61022D8F28FD942AC95C59AE5C710A6D1EB4913078 -6215204C63019448ECEFFFF812B33014B6BC5FB22F4DCA7817CB0E21747E574C -B98762D02F302896B17FF8AF44E95832C7C08DFBEC1B1F33E16704FD27EBEACC -591A81AF3AF9E0668EA64088ECBC4317136D895BD030F8C5A3C4218AECD86388 -FE4775E057EDE6251F771EA5F125E6026697B0741729BF8DE0B542AD32B562B8 -7F61E71460AA96E414FD4ABD7D23D4C7ECB122E7DEC30400BFE0E7C19990506B -F27B5F316BA18F35C7AF31422718B22FC86E9310737D2A638E02149A3758C681 -700987E99FD05EEA921AC6E6E5C785FCFEAC82FCD9D5FB2CD3699D8B1C81D11C -5EC87314EF4E837D6548554C11D3D21E847405E7FF2CEA029E48046168B3E08E -2CEE460980CFDF59491A35F10D15A68E6D06CDD3BC51037F68C0502EBD64393A -89157994982EE9EA6926C64EF5023A0FA334D2414C2839B12D12E03EA51AD687 -3F9E7BD9D355AF773648FFDFF6E21E944CD26C6B8B0592B1A925F8C0605A6E45 -DE3E637307EFF7027A98136B6F93B0C9088743DD8DBE1CFA3F87F06A8434FFA7 -4D9468EEED7FEB9F4DF36AA6E872F3FDDC253AD795EAEB294BEEDF6EEE1EBF96 -4571274E142A5BBA3E68EC6857444B708761CC7B4ED0FF7410AB69F93DE6B46E -8EA7D1CCAF79EBD23CA34879E0865F6D1CA61D6FA3A1E0B37F19EF5FEEAAD250 -052B463532465EDE2C010E58E4C56D3C3871128400DFD07B9AE06CE5CE56D333 -85A22A76BA0BD255D47FF4C9A8528338E08B9E37A22230563C22B57D732C40CB -A8596ACECA557E3D8F9C842B47BD89ABEAF9A0FBF45399B902AAAFAAE45C13D2 -7673A789D91398C3365C9F42D060C49459F9C0F8119BDFCC6B712323701C1B3B -90E59BAB047F1A2A3C2028AA427E39ACC5BEC9FFBD9AF2EF4977069E9D12E18F -2DF8AB7CDE5B40232CA3D1A65AB7C995A4BE80B2575372C757C38E3A6B014DD3 -743CA81177817AA76C527DC9B4AD429DC20558C5E1D195547B1A86EA47B8363D -B6BAF78AC5FCC2A345768ADF8E1D4473199B5BE29FED3561B249A48CB2D1D295 -3628EF6305ADCEF41706DC434EABAFC3286A5C538F61DF8AB76778A5EDC39BD6 -F33DC9E580152F032ECAC7D3000B97E9C0B4637486CD11D2BF47B5DF8844319A -AFC9E4B0000EB1EC745CEDC6D052D772B5325B656C1DC7D27F7EB0586094EEAC -AF339B7E2B056126C9796F68659650D0BDC4C456931DE0CC79560771D6374EBD -8C8DE881E78D31F1F5CCB1597602D07793EFE2F1B991C8FD05F35CE2168CC1C9 -9815DB43C9E19662B27AA40B7F2ECDB5FA6EFF7C1C4AEE23230BF80C352FE320 -1D8F3E59158E52A32EBD691FD5BC0D1D5370F90A0743F8E5BCD1485372F001F2 -2DDEE60AD113AA36D9A2C830098E669838958588AFBBE457D008A089E7A1DC17 -8ECC91F8509FB5A0B7935928EE72086B5BF92C10F195B1183DD282E2F31AE6DB -4B660B0224C907BEF3CD0A45C9B1C92F3915608015C9D4178DE9A1AF2621A214 -E3975C1E95C5F7315D1E91CF055B43141583650EBB8D570D8E88A545899980DB -E07C092978AE0A295E80F888220DC5EFE60BCB534B4CAA13D56892A18DA6784A -456386E6B5FDE92E0880FBA74BCDE958BC6F1664156288F136DA69DF84AE6E6B -F04C336D08643F64F579C8865C8100DE1139AA75B0FF349ECB193CD40FA60319 -B24B825C9DE6CCF7BAC2D722B93D386D19170D71F81FDC33AC8CEABB5125E50F -0151E113EAFEA48C1C05C113952BE0ABC5B2A3908192397FC56A1F4090751BAB -D409CA4AC0091866D114B9FF10AC90B6916ED111EC224F294BDF8CCCDC3E9336 -B8CB13A695887B8A893BBA7562E054E7BC2C4AA4CBB96542B0137F091B7578C6 -73B34C5149D939F8590ACE8CC083F63F8F239175513255CB4697E7E7ED584401 -A2FFF58723043A7F046FC9EC4C70E835FE80B07D4EC11FB14D16793597A09BF3 -292A8367AE4A8A279CB92FCD2EEC083A75195178CAA4A1D93D67A2C6A98D408D -A7C145F5FE4C6C7CF2A4CFAFC02DDD631B745B13FEA4A5710B4F0D7E992D18DD -A5BDE04158D7EC4DB9DCE3E24558FD74C2599E4EF16DA1C33991C7D27FC1BB78 -4E9865C28A75075C4609D08EDCD4DEC28522043E510F637944C3BB8AA67C2CC6 -9E3FD5B528A6744F4E0DF4D924809D1FD627F4B6031D85E13E3B07C7D710A0EC -86BB8269797E745D7A7458F7D15D1810616EE9699BCA0D366FE106D60BE84D24 -DFE7AC0FC125A70D7FB057551E737C5675D165E3DBCEC1E053987D078AEF7839 -2F73428EA2F6302B6313E162DC81D93FE0E981F859DFA4CAD80A78515BCD48F5 -708D332B4A621D8848561893987729CEDC45EF4022E1D2A6A6BD1048201D28F0 -AED64DE459AC4CE272B170103D02AC44E3646396B251CB5D70A418DAC1E1663F -890F510F215C03092C96639523566C20957E98EE44BEBEEF04D7E9FD33D8356C -468579E018AB336E18EACD06ED8273F67475F6A5C732D75F52703D019F40D53E -2B26C34D5C91269F987268BD26A0AE63325228771650091F9D1D8E15A4210255 -C38B54E8EDCD23FE74D1B92108892192B274B7181F2B214310E37DC5557450F0 -B6020D9375A4E11BA6C4F476B214CEA60741454170AC24F1DAF8C45D07D81E16 -E5229C27886C32BF404B151602A53AFE13485BA120940C9BC32C87C3125D6B60 -60136D024377C404D34D5F245EB14304C78BFC2C2E4769250DFA386A171395D2 -FCA9752197E38E568F5FFB81DF03299864ED405068792837A14D23E4DAEDB8C9 -90EECDC45C21B5273F120F1E2F8960E62FECA7903A9AA3DEBC031A5D3FCDB717 -2C7B9F627D7B76F47AE0905810B0EF86503EE4D747EEDF560B3BCFE17822D496 -C77A335466E6C7CA4C5FDDA4523BA7B2AC8D438C554B9378977D64FBD56FCCD9 -73ABBE4CD4FB36D7CED8F6A0D15B0D1C15311E5D77694AFCB14409189DD5E386 -4026AB274BA33F6032E4937B1D345BD4FAD3C2BF0904E5A246E9EBBBF1FFB7BA -789726B9D7F39D64A29817C40C9515551E19775E50F3F4BD1EC47E2D8FDF830F -54CC5C4371CC30B0856C00DAB9B1ECEBC0AB17BADAF8E2E2EDEA95EE74938E09 -B3CF241B9E09C0DA8E0AC696F4C98A2EFCC526F1C75E637B8A31CF9A8BF52280 -91A5543D6DFBDF49AFAA51CC6C7B50F6DD1958121EDB2A0C653C3A32F08696D8 -93A61A7969C35E6127BD7A2FA1055014A10286DEB8422C9ADB8765A11082C7C8 -DE96F0092F3637466C053BA316379B3CBF21D84A7B01D174DC5BE1415BFEA654 -2E693BFD946BD7569733B0FBB2C5D247735A48A7C841BEDC92CF8A799C07A478 -E7E398817A355F875789A28715AE0C95B58DB0F1F27572D16AC7BA72F98E5895 -68848616B25441D0E1269033AAC8A6C997B124AEF387D72F0F1BFFEB5D3F345D -F6A5DD7FCA0CF5AF676C62F6174340AF7DA870B6D406359A7B294A818442472C -799EAE9D7D9C388F2A302459D30DA7D5470F8CCEDF9486B4F387C5F50DB4E409 -C74A09BAF62217004C0DBB83E3E73E169BF945253F42DEA5F568E28463DF7328 -9FF0CAB049BF700902B78AE3ACDABA17BA4B0DC6D547FFF45818D34B7EC699DD -290A420A9DB5567E5109FE8646CC874E057EB18AB1B298A5F67012C0D297F76F -26FFEFF0F02CF4D7E2E8A25E1D99E5207EC9C9BBA6AE7E6D198AF2ADCDC536D1 -A784B82ADB0278740BBFEC9A8634AB35DE798A23699048CDD5058F0BA64E0D4F -906D8869054D22948931BDB65F4454567DA31B3B5E60C8201CBBD7F05339BCE3 -999E22049BFD2660F750778FEE6D5294FA04D74B7AD092173C7EA8D77C44F6CE -F37D47B42CCD6623EF57806EB9D752C098FE656395A77B5DB10B910979B7ED1A -CA360887161F01EFE8DA8B7F6E6F08139977AF1959F6525A73D019714F5ED0E1 -9349D5B3EC3A26FD8D7C3AEA1A6747003C24C5E23551816CE52EE19EB2EEB486 -28DF30EC3988A852F002B1ECD24DD29F1B49D6F3223270AFBC25800DB1693656 -203F52D11179DE90012149A324DE96E6096B6FF7D15BF3E5DC51D4E8B321E232 -77E14621B21A103322A4ACFA7C4B76CFCE1F631B94AFFA67EB0C2BE1AF4D91F5 -B9DAB5DBB40C79B54FE2C63D5DE4C59E92E7C976BC6A085E81A3C63C9CE9DF55 -8D54219F1362EEBC67839B4293C2467827A9FE0B34353C4857D75EC231AD9ED8 -659F3B608F3C8FEB8F94C5FC60D6F9E05752FBAD0DD4F6BC6AAE8462FA9F2F4B -F6CBC08120BE84C15BB337D33B20D6BFBE8093C08DFB59CBC2CE586B6216A81F -A34605C0657706309FA7D20B11E97AF4120F7DC50947CB8A11F9294CCEEBFA48 -FABA56438EF8BA3E09CC74AB561CB299E444A3546E8F230FCA5CDD3420B65D0E -39770B4AB697A0238C51EB51083C4650E7546F5E7B6FEE147546E4D679EFF14A -A19622DD442741D296B470B9AD458E50EF4F8D3024B7ED91E65619EFD0A09621 -83B4F482AC70945077C1C7543B76BBA4D4D131D3FF755DCB3839FCEA0FD950B7 -394E68521F744344B2348EA92BCF46A232EA96D1F3374818E66D9CE066F30CD1 -BD1F455F36FA1DF4D09D9A81A330B2037BA5DA8B3D511876B1C37BA3790B5C1E -D29072290C558FBF170CB6296E052313801BD9F45ED2226D11A46640A10D4F9D -8F2ADB5AA691CC3BFEAB8E0A658F03C42902DEA8244EB9F6DCABFF415E7DF538 -60562788DD8017210DE0F830BF6E6082A6381AFAE03A7DAEE1A15D0BF16321F7 -ECA7EF7ABA8813FF7DBA12B78034C64DAA2BE22A5905D8C27C1B705C9FAE55F6 -D9599694E3688E6A2EAE40F585BC5568EB3BE264CE97DD016BC1C763B6C11638 -70C159E839EDA20BA075D84762C9CE8232A32A6888A0ECCE7459309000735CE2 -A4646D8E947A0ED36EE490BC472EED575D05D4882A0A104205D2CABDFDD77134 -71ED6C39A01FB5FE23D3DE562BA399DC34F869FA8DFF1C781FDFE1B5E1C9E467 -6333B433FA29679252D93DF71977CDBA50424F3E97D84CFB7F555A80B0705B2B -4C0ECB9747597A32D198552D7705EF4263818BF6FE9F4B2D7AE1A6BECDA40945 -C7AB6E19BB324B2EBB38D003F49B01598111BADF7A03F4F006F1604072BF72F3 -C2636D8CAA5D98EC25F7D9B3E0E3C99F4A79BE1F144BB11C7D8BA4E5726CEBF3 -EEE5B37D234FBA35917D724BE0B4FF9E8C85DD923A486364FD44CF2259F0313F -8BE916E7370DFE34CC3CC6AD44460CAF739E24E5308FA568FBC08552B643EB18 -D86EA125D4EE98AAAD884D2BAB1D5264D45346F81556FF310D5DA1BB667914C4 -6272DFE61BF3BFA30341A21A6AF4681C4099CEBD51FBCB3C43F2E74AE7E262F0 -38682D6C78B016A997E4FEF8959B05ABEEE29E00BD3F86DD98FA3210E1691080 -374666B5A45BAB3A3C8E231DD5DA433CD5C1D5DC95378C9C6EB6AD10801C27A3 -76A1EEE11A9D1E086DEADFECE2C039DA804BF4C647381F0A0F7FFA9B70568710 -183B0436EA4AB0ED9A68D829C1DC77292512DA2711920831E96FF2D7DEDF7CF7 -9E075702E1D9155ECE859AD5C28A10C3F1A5576ABB2196E562B588EA9681B9DF -378AFC9F47AC346E10ADE9508FCF5F208AB4063151349CAC48C6B1B1AA77AB24 -358E29488FAE43C44CD4393453E1733925FC34E4A32B26E23AF0F9A73DA7C373 -B1FFBF09D893E83B08675B4D2A05FD34999973796EE078DB227354822E55E3E9 -7DA31FDA41AD4693B9219268DF50B81A75713A8D8202574E6141C27C56A2ABDF -AE040853FED550A96B86A1BF802597A987D15AFECC5DB29D13DBC0DB83605B5C -F4DCDCBC7FCA89FE7573491D94FDC06607DD8E3AFB4F37816B755131DA7A5F91 -20AD2409A7BF06ABF0185A8ADF5570D85615113105C9F2DCECD48E5DC5E63D7A -B22275DD560B3F908C6800CEB8FE2CC90D7D0A474F5BA7F5547C570095AB1DF2 -CF2CF8C0198B4DB8F63056BF3B22850DDC5AE22C06236DE26CAB01FBFB817060 -CB3A0FA3F266571910D117A3203D28A18117B91244DD3AE911461FD73C9F78CB -C9BF436DB0B6A7B99F4D2574B397AF876BAE65B337BF7D882279BB1F61D71E11 -3B2A773945AFA21E13C9F80D91656A01B1EE0E1BDB739C215BC2203D7AD28456 -4FB7ACDE59ABB24DC49E9799ADD8F7B092002ECD40A9DB0C46CA4B74AA21BBAA -4C715DB3CADDA99F79A7CA1149F2D24FFB8705C60EE84F258F023412DC042F00 -9893E3C2F10AFFFF9FC08143564FB7E99C885589F3A9BB4DBB2D3207F2C715C8 -E3147793DB25BDCC2CED771A606CDE35B95B261AAB560BD6A6D7380CD09EF766 -F069EC63E0C98AE637A8C3A6E3021F0488DE5D6D97971D82EBB3DD9FFDD4457E -FE1C9C9BF09602500EE7C45767A1E8126586045CDD11A397448961DD348A55E3 -5FF7BD0B3D1DF585577B9115BBEF9510E64F47F2B6847F04E117FB59AE43C512 -7EAC910998069FD61EC937DD2F58E4EE2F5B24A79623E8AA5C515DA73F6436BE -4E94772B0053E8C565961E9D767C506339867BBB18CB833FF42A8703D676FEEF -F7668BFC9468881A006C10436FADEE8EA4E6C5593CCACFFB740D0C6C31D6FE8C -77EB8DC51A69E671BD4562B815111E654279331D97F535A23E6B771D857251B0 -563420B8F29F15C5AF357C73792BE4358667753A7A85E80A1D4FFDFA38ABE03C -E5D21F22E02522DA4D82F50BB743FDFA58E7A435D4D1047CD38F3703F3F20EE6 -ADC9957EDCF47C852B7B030D0BDAFEA6863B1043C7DC2CE6EBBC62B8BBD26E32 -32C79231B4F48575752865FEFD92400FEDFABD13248257C912C930FB26D440D7 -CFD294F626C36421B0FCB03F2CDD880C66D0402DBF548C6A3F807F4DF4DCCD6D -272AF53B21899D8C5C0737929949753F012B8D07E21F043663928EF17DA51681 -2066E48F5B1C9117F45F0010C512627A327F99493699264E6AB69ED86DAADA54 -A100036B079CD4882262FE22BEC5BD9B701FB077FB970123E009D1065AF4266D -EFAA3B6FA0333E4803F81E6495D8FCF35A16532673F71B7EA505F05B569DD75E -0B3F39F5CFAD54AA5C80F8F082C312F952222AD409FC850DCA1ACC78B7992A78 -939EA3A4B51DD2DFD10FC59F049619FCB40DB92A9D6B16E93093C994488F6F9B -EA42C3A835E0CB93F0C1534BC9C1F4E33EE345B4FF54CC4FCA7B641A8F155006 -CE79BE0B6D0B8CB74170B6667B5949C6F9BA4CC90FF6BCD2322B351894035934 -CAC8BAF06677832E40BF90313CFCC979E6B8581F6986F5D5A9529A5778F4927D -ACE747DA8705058D22F03697EBD239A4EA64D77519EEAB4A72E719545E3BFCB8 -4317217726052E32239D2A34C0D6B29DCA53899B4C930B5B2034D0E6894F5110 -9EF709BABB60B8C65616795F40C62B611CC0703B8E9F394A61B5EF1C14129357 -261984E369EAB3CD2B58536E84333D9F80946BEE12F342F0650F2FB184DE6165 -42BFE4432E3AAAE9341D8068FE446291F12524B2A1B8B5A4D60150C642B18C0C -0E5D74B2C4B508652729E342F27497D769ABE54E45EBB0D8A2E01F90393C6F59 -8E4A6C278C755ED6633D9C8FAF5C30BF86DBBAB912FB22BA4F30912E8E9699AE -8CD0D3631AE3D192418939D959257CBE3B39404C0111AFE56C81F5932478CC4C -C0453C2D30956DA085457F43F079E94ECF6BC61914C63E240DB5CCDDEFCF3EF0 -CBDCFE02344129A8DA0B9F986F6686DE8E52280401460019CABECEFEC7E8F98E -8AE135A5E05DFF8E62E75BFCC7EBAB8EC380C1FD1D48FECC229441C4CDE93B8E -60C96E6418A9D286DEE46D0D82AF9D2714FAE2A30A4D9B9D2E5B34D5368B39EE -266B2CE395CB637EF2676610E303E83A0CBB53FB71D5FE08633FE3207970A864 -48F03997798A209D930B8A92338D177CD0C3FC7520FBB7FFC4E776009AFF4D0D -9FCED078981ECBBFC8B0911F830DABEBDABC30A42C9E60FD5DD4672AF1048621 -8E3D98F92A6156D31B4A7079FBF1639BE20B24D1439007C200519E3A870BF5BF -98C2A9962BA8449FC5E48B9677EBBC4CDF8070BB6BFFC4FE1A6635DC735F4801 -DC0176C98495B2AD37791ADA6C1FB8264CE0D27BA13BA315D08DA1213CCC6748 -E9673881C4183F20A8B97FE13ED651351E5D2424386962F578205C1F7653AC26 -D83239B66A9C567CF1606CBA9CE574320107794F9229ACC234987FAC848FBC49 -4D1253649515BA36B93A1A09FBBA2849F20A4F5C6F8AC8B4EA054219D21D3849 -DC6D1E148BB0D1E83AD1FAF3BEC996E016C32BEBAA421A94FE0E64D4E2239E42 -5CC7AA4590643357472F59DE1D25276F4E8A6DF2DC832AECAED359D2EE0DA6C9 -AB1EA510DD4656656EB736D8B1AEE07197BCADF408222559E39409D334A2BE2A -81B7E652C20CE6435A11B9C03ED0CFD3F9EC893F74FC4899E2359D4D2723E0F0 -89595D06DEAE8E448E268ABCCDB833CCA7BA37E2FA9E2A827CD381EBB2F5BC7B -03718C4A68DEC9F9542E2A1181FD444A1E564462FB492F10F290CEB56386B141 -F581E2BCDFD93A47EBC7D6763648030CA866EF24DABF14BFE929E70B4B38B605 -22F9C0B7724371EAA474B380FA5CC0DA0410FF931BD9CFCC6F7CA04EF1A3CCBF -B86F1D1EC3FC26CB85E3F07B0E833828922D03A347267805D279ACF38943ADD5 -7390121B316BA0F20654FF0643E241F78BD48AAC1A4E511514EF1D63BAEFCE12 -C78FC9335044190E899B70781CC02FEB37262C76DC73B30CD60699CF8AD070F3 -C3409DD6242709E18A452AD935ED9DA19F3FDB7F5F2009115D2BA0FAD270D183 -5814B26902689058081D48DD84BB2B9B3D76099EE6856CFC9556BB88566A3F7C -09A2D66F5BBC5A3120FB7804E958F29452A26EFFBDD0D774614FEBF45136710B -CDA86D589241D213BC7B27B440C7D60901BA9EF08DC84421BAB0874686E13D33 -2805DD8836DEEDF7C9995320B9F22091D30A1A176B516C71B67A92CF365E31DC -AE54B695714E16F85D16C80189B5A8EBA8169419077742AA0A150078A5A9E902 -875CD4E59AC0CC9FC1AEDEC76D007FC53EBF36D746153960272A0998EA05AE4E -447B609AB48451DA178661D7B4F6C40F5B2D40D0C7D08EA9BB55D82FF6C26196 -9EED42B13F570453E30F282C1FFE8E9F0231959682A39B8EDB3DBE83BED1714C -862E92C0A1B5F96538B8C14F06BF040B387274A27EF0561DA0B16CED92E602D7 -C221F55542EB8E712A48861E64830260D1251C28B124425D37C1BDF671DBFE45 -89DDE5CD60D9E592B5173C210699B12F449CFFD9FC2721894094B5143A58BA84 -3C45A4CBD1BBF9782755A91C3B006DF983A543005BB8BB89FD72453A4DF16E92 -F9D2C6399F401360D475C44DEBCC18F61E8429ED28178DD8BE8F74014A4DF429 -4F149489773120F53DEA4CF78849B4025057677B47D82B8130D2583B51E576FB -1D3D5C7A90B820D6782AE44DB08D1609C9415686FEBFBE4D0882C03DEB5F4899 -AE0F205F2F31F96FD55FB7AA3B384A -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMB10 -%!PS-AdobeFont-1.1: CMB10 1.0 -%%CreationDate: 1991 Aug 20 16:34:36 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMB10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMB10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 97 /a put -dup 108 /l put -readonly def -/FontBBox{-62 -250 1011 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F00F963068B8B731A88D7740B0DDAED1B3F82 -7DB9DFB4372D3935C286E39EE7AC9FB6A9B5CE4D2FAE1BC0E55AE02BFC464378 -77B9F65C23E3BAB41EFAE344DDC9AB1B3CCBC0618290D83DC756F9D5BEFECB18 -2DB0E39996C010F3024A5A3C69C8485664A4E3AA81348AE21A30280D0E3B6542 -A770F048F31907891EAB8B57DC70FF775574D6CD26B8AC9C3E64C3631325BF0A -99AB413BDADAA3B51A3E168B03A856EC7D346A38BBB0A2700A23B2CA91120B9D -2AA5BE5A359C60CD78F055253785CC9701F5D670ABE4967D74838C3B267C6563 -C9651AC41D8684AD5E913A5C9C547CA225A74782D1AC62020FC38E29C356950A -00E8F2B0752CDBF81EE4ACD59BDEBBB9523AE4764B995855F3A401EB4B04EE56 -B10758196CB661448A3617B83CA88C41756EF131CFCE0C968B94B6C69AEC1E9F -BF8B21837BC422D766B5089D81CF35A807394A026FE3160580695B1213968D90 -8ECD1611E719A871E15C6085A17906F77B5B2DFA6AE670976758E67F8A4FC362 -FC7299D85ECC3C0BBAD4649B9DAB4A2FB248D6481CF0CCF274634D37A5AA4DDC -31F3138AAF10998FD66F3817B77060E71C6D8F17205F9C098D81D952E0FE3831 -2264C55D73215176470D8D75E7BE6E44514984B9D20208DB3ADD4767CAC09D41 -9C8DAB6EDF4FA1AA2CB285CA28E30972B3BFA4F8600DB92164865738B015A331 -EA9EFDD478132047DAC28DD4FFE419F94CF5FCDE732E53FD332ADBED32F76B2E -69531BCE0D461BA3F41A528DB0CCEFF9663FEB3EC9CE0F760604F835699D7C08 -CADBF7AA3DCCE9E813D66BC62C6E452FA02FE7E5F4FAAA527B4567AA4FACE790 -87910AC2498C0999866614C90AF7DFD65A59B9183FD8AC5DB9AA81E8E8477F07 -3501D4BFCCBFE32C964D3549B42070D43977640A289060AC0BDF951B78ACDE58 -D95548DE8DE75EA7A6F5922BB463FAA93487253414EF4233C8BB976B280E1A92 -A77D2D907599AC9302D1143597D4CD494045A0261DB9245A613EE31DF8994568 -F7D0FB24D761F5B4E8A96B5AB339418462C29EC1DE163980AAE4B6190A1AA91A -D935859055FF59BDC9365F825C409B52530DB59A099FDE62E716090B6B14D2D7 -28662E609B24D00FDD9F092F15D94C0726B1D3610F20A7C658F19D26DC8B53D6 -8DD06EA7E45A8150DCD2DB3AEDD9239A029FD6B5344B0FF779CFE958A5889AB6 -E941B9BF0464CB0FF3247F17290F82825313C171AAB70BB80D21EDCB7628B5D1 -8266B3E93852BBFCE9CA6D38170F6CE57219A301EE8B989D66852EB7A48A8177 -96722414CF3B147E046617BA46F6F1439F90B6B3812D61619904CAA0B7CDAF29 -D6868D7F8346CF4164DB12015292BFBCE474B05BF886430411E8E937B6F09D74 -42A2C0EB14BFC76003DFF172AC44D730214DEE512BF257C8688FBED139C01604 -2C34B2E4C33219B9 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSLTT10 -%!PS-AdobeFont-1.1: CMSLTT10 1.0 -%%CreationDate: 1991 Aug 20 16:41:43 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSLTT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -9.46 def -/isFixedPitch true def -end readonly def -/FontName /CMSLTT10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 39 /quoteright put -dup 45 /hyphen put -dup 46 /period put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 121 /y put -dup 122 /z put -readonly def -/FontBBox{-20 -233 617 696}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0528A405DF15F03DB1C3DA8B850431F8 -0E5F73DAC973450D1ED0530313057E971FC7E7CA88E61DA6DB9A5CD61F0F76CB -4DE9105D0627B8DDF51A655098229920CF429CDAFC3F7788C95E7AB30E84F840 -8CED52E98DB4CFF161D2E62B0D28CB8B0AC82E7A8D2C007953BAFB3056D66079 -8064956E257D31C13509FB81A250D9E875C77A4E91CC49E9FB3C0718B2F691D4 -B4A64F351F4DD68133DED7629B0D96E5124584A16FD2AC7A3EB244A934FF059F -ED7297B0505F3C2994AD66A3CA5D2728B034DE94B64A8AFAF341601BD4DB5858 -C9950A8BB9C598B8960609F48116ABA8C007190AF0ED335EB5BF61BA6871FA5F -EAB5A26AEB5C7C352EB80799CEB983F19EEFA801093F62086AADD0B80BB6580F -2CF61B1390FA56DFA1A0B61C58DEF96BA767A8A37EA44730783C600706606C60 -4EE74EA99B7C0F8E2525C8847F3D31907C3C483EFA98F6C416B6B2C343DE6370 -52FAE423008D086A76A1FFB327CC7FD84B1C66B203A4F41582F4599A82F8362D -38108452EACCC937FFC4F3ABBFE3628DF51367DA6BA3F6826FC6522D6AC5E8EA -00BAD300FFB6DEDAB93237704202BACD030AA824B1E97C0AFE17FCE8C75F4FA0 -B8A74329A6CF1788C7EB34DA7307411E9AD7ED8D6582884456E06E033B4FFE7D -CD4DD8B06AD01340CCCFBC382C18CA451E4C886B01D082FF8CC5793F4727C3DF -B52B4F1A242F31D1EB79D1E39A1D4FD13D6C5E2A42AD4B4D1CC4EE7BA0E5F80F -802E5AB57EA15F4DE44D82AC408AA86D4BF58EF967FBC6497BBC7F017C0598AE -32CF865DFFF0FC7FF9E6DCE9B5F2F4C7491AC674F46E8E7660452CE0A77C1EE8 -00DE382ABED85350033F8ECB97398E4E0A75D4877A107F6A909D0C76D14F9A96 -8A6CFDE3FD9D79B6FD82693A9F354BD2ECF30C6D99F7AC522F8D6C93EA214F7B -3D0ED77F042ACDE9414264C0698E86398562E2C640DEBBA0734AB4C3ACE3907D -CC79E6B2C6C3C3F9B01526E8CD98237D4A9B403FF8CE3132222FA60C196A19BC -A2393AE6935C0F8B67FC1D1A1359BE7E7BAF694B91B61BEC6DE6C64356746771 -0CFF188ECA9A543A49A39A046F96E819B541E5208755E19B080CB0FD9B42B72D -855FBEBFF32292D435852A14BB713396782BA940E05F38593D288F107CC0BF82 -14A204A7CD65F00AB44D48036E58F687DC2BF6584C410AD4A58F5A7CA173FD74 -244C7313B0268589293A261CC08460EE65079539F5E68D4ADA3BED2AB983A354 -3D653F25D0452DF9C3519A0FC8CF71AF81BFFB48CBBC8B04AA3F9B3A60D933A0 -40299CB46697044F849FBD7847BBA0F7D5CED705C8E4D74B83671F05E5098857 -E87FBAE522995960B125E2B91D1A565DC09646FD83955162C3A583467C792D2E -C98B830FAF360BDFC63AC345EC6F1A79006953121CFA26BA7B164A1125BAE4F1 -2C2EDECDABDECC2F8D94B6F1DA48E3D1C4B1D914E14DC08AD7E67BDFBE327092 -2B48B134784FDB084B654398A1037BD95483F8873FAE68C9F31CA1F90284ED16 -951B2AF75CC16F2597E0A72397554CD53CA9541B09B2DC1A45C6FF503E3528E0 -22D2C1AD257C5E564FC4F4F39236FE6AF9F1421BCAC7C2790B2A855CB7669D42 -752639F74EBFCF234E570EBC7F2858144D17CF17D6A16950BC6919C73CD4AB11 -E948284006DFE50A754DE8217B23D9FBEC052236F8486448A6D3F9D03B0FC959 -56471B443DDDFDC012BB881C15AA0F03A34225364CDEF2FFC5BD9452B3179174 -90FC3114D948E15FEC13B03D08D15ED8DD4F99A97237B46EEE8BC7428FE2F3E3 -1737E6D8DBDA770EDBC95C27317191CD77DD1961126D917125BBFF006F7B96CF -E84E90D56EA4AB1A0323FAB001E835A90DC5349CBE9AC0FB5FE253DF6ACA2571 -EECFDC1256C947C29455937094F5839D5665EBC1F0DB67FBFADC836A09A82FAA -B38C9854BED9DEA3B4A1118A382B2DC930D896716D9E1075476CD91E6FE77940 -4EE4A8F2B77E8465E0267D0FD471667CD258DA593CA7C6C478D178F27848815D -1E2F429ECE1015C3805B9BB5A94D288D5169D2DA94016B71B5276FC32B336576 -F7CD75D2B87107F7B50C5A328FA139D42359C3AC6627E689C02161A8FA5718AF -EB2D49598D96C64A963C1DC630B1B1038E7AFD48DBAFAE5E0C185D312BFEDDC9 -96D8C394D73CA89E7C26DE76147F46FA239EC275F1F4E17278F7F8C3846032C7 -FE805D50242EBE4B4D60209C414A1FB50489D532E1937CCED646DFA4A8965C04 -4F2B5DDDED79977D93B8BC10F89E22674947E1DCD565E0F71EA150F5525A228F -523770127908408EA2825D9FD41B6FE442B1BE570EECEF2539A10D07E6A0FA1C -9ED9054606FB92312C353DEB64F9F99C52C7541A4284BEC6B04D8BCB19BE7D47 -B386B2CBC7E2726B7906DF2B9C60BD0EDF02F7BBDBBFC77A6E923B2627AA48EA -D25F60AFD1DAE1EAC5BE8A5BB9E9F8A6A71869B75E5C09C43D7C7A42B3E48351 -72704E1C990989D63839643504DEB3AB1C65EBA7F034926D26AEFE92AA8CEEE2 -D1C535BEEB93F5E671281F6C20435B4A873B4CD9FC8DDA212A289ABB97932DE5 -C12B848AC1B0FBE149D0AA9C5A0FEBAF15248D56AE6CD7E306BFE9C21876159E -5ADF792D6335A5BD308692C674167E08A02FEE67090D58BB2B2D9EC6FD598DFF -DFB6CF6B78F8E1C8D4215CB33AAD5E897C75A7C8FE63ECC17EF941B33766AB2D -2C295DDABC784851BE6FCE8EB6E8DC24B332CF836D2AB3888B85E1DEE331060C -D7D3677489ACEE8D77F64D9A833AADECA12191611163BBE545A4C75E4CB1BED9 -95F2C06560FF628CAD961838DF4B03739E1C946F9E5F369FC86CCBA63DD638AB -67AD4A40EB009700C2FD6CED16BACC301F27C12B797F480E73ADA18855876816 -DD85E5E2AD2C5BC9CB59E7F26DAAFC5848BBE7E40CD9E334E97F80A7461CAE07 -6E92B97CA810486F696F2C8BA8912D19F2C0D434011F66554B7599517A2FBD7E -F442B85BC639C49614363A126A498365435C4398CA0151DF8EF87A81F5282EB3 -EDDC5C39F2BDEAE08555113F9B4C61A4A7DD1BF8BAB286AB2E971DBC265A6A0A -931CB6219FFB8C04E8208225E3D686315EAF39F674B63C661B23EC073E82605F -1FFC94BCDA637C86574319C41CDDF97768BA23954406741B9134FBA45155F390 -B18215B80BF01BE86C325E612D50DF2F0879A2DC24FE71C9BEB77C42A67361B0 -D9DD197A80D16EDE3AECFD703D1257F9433EB845C9E7AD81AED36D534495EDC9 -D68C856231BD7DA9010A0E6AEF18B11C0B392A4440A8F56FC28397C1A073B618 -B0AA06543507258A3C63C24BF4E1BA06BD3F8C3930269EFC2CC42BB4BEF7E363 -78979A2B8456784550F744513D8BDEA6A946A3F4FE5E48C6766A2DBFE4BAF29F -97231EED7F9D916B4545091E974CF0129AAAF6B285F81CEE555D5ACFB8FCA47D -235BE102E9305D4D0290651BBB4037887E1AD6E08C01D13C182109DBF68AD805 -C67C792D7D3A9C099FE4419B70F6D932F325EFBE94931D5D28C79402A1C6837F -DC6E1811168038A342BD5B4F5371C9783D0B74940633D7B7B8F8B8C32BF5C71F -A06112A87225B4270ACCF383AACBC983DA29281C395D7F2342696D35197D4CC6 -661DB9FAC95FD9EB4C77F5F83159604185AB162347DAC0EE51E65C8C5098F7B3 -3E8754211B44EE1C16DF2B59923CB8FF64283B5C01106A978EE3C09AD5AFDD64 -A881049FF8B17FCEA0B0CDD92A9B366617167AFB6D18FB19DF70BBB6DF205536 -5C1D58F8459FB03319F3B5F4D43DDA15C8323B57CB2D5686BA1A4421625F47D2 -006F73993BDFF70C7FA63C0C3B3B038AA907711A2958116895E75C0C99ABD2E1 -F02AB43861FB0AF5E493471102BA57BA6E3995996696107D1537F9B92F5B0767 -0C3A5E374D3B34D7A67AF8AA012E9BD904033EE95FFD412C14EBD51FEE69009D -EB8F4194E21C596F529243F6A31F1A5631C42990D6249D1EB330033ABBA40405 -2CE62AB60FB1AB122E9A40FCA88D97410DAFB017153D37EC4AE4AF13701752EC -387EA20846202187C1F4F853B6D4B6179E7D0BB9C0E208845E975D26DF1C2B7C -7EBE4B2DA5ABAD95BCDB294E50B42FC032D8D973626ADD10142D69B4DABE2C89 -DB817C2C1AF9EFC62DD501A9C91AE35EAFEC12CBF66DB9318DFFCE7EC3C9246B -569A2DE8A523BB6337D9828EBC0E639179C94E067835F6D345731FD98483DFD2 -549CF02C77E1C4262860DA5F182E248850A90F5C23E2BEE1F6321482F040E2A6 -8B83C7B2502702648694335B177504E757553050DB684A254C924A5C9B8D20B6 -10CB6D8D7D495E473C09E271E8A315D7E3829A429B085C803BD6EB1BE5F1D210 -C044B15F104EEA05CD5D90078BDD975A8EADDA67721895774C477A8913B4E97A -34939CEE30608A842313D30BFB9FB4846EB87A939C84C2BA314EC87AA8655183 -F5F42F7489E067FF643F159384EECD7B679C6F34F8AB537E11D39E5D897AA913 -6037E8DDF13094E0A9EAA04AC7D70F9684E36813BCF872C39C0DBA7B0AB54870 -9D1F991B684B058662CA8C8A7D57F38ABD15CC50C71BECE67F014BEC61FC5809 -407EBBA0263BBC1C7C1642DA4E76029BDC9D8BA94F527A11BE9AFF27A87B91C9 -7E1C0850166433609BCEEE28EA85DA21E1F5E312B5992CF94452946B525EBEA9 -658D1F1CF8E0CB6A36C6446F70C4EEA466CF85CA50B051A73998CE1E9E1E308E -36B04F3D129BD618BD671C52E8CE6C8EA7CA47C68D9864107413B6E8D0113BF5 -6A076BBCA316114C7E3C0EFF2BBE5348A80D09C4F8BA51BD544BB23F554511C0 -9ECF91F8C6BB507003AB73C536DA96FD4BB21A1E0D23DC3E754D9AE220A88944 -A70B01A8E4565C4E8FBB9FD6AC5BDA3BD91F896CB8CE67BED7182ADCEAFF58A1 -8441452D10A158832F40BE2214197EB41DE2F0ED9E407A0A0011ADFA806B88EF -B3991ABBDCE871996F0B17D61A0C76C6E9BA926ABF8BD3752DA7D757B84C1845 -D864C5C6BD8FDAF3740CEA2D0300D53605C9861D4D86C188FBA84F1281C4DB96 -E22D31A7E218AD251111010B0DD4EE7B32745542DC1D4FFA6543CEBA105A63FC -59F8DE4578B263901E38787E0F4F197F1BF90EFD29684AC0965B66357C1F778D -60CE61BECCC65BBC134D6A77EAD3E498C3B8639B7A4D95B08353104112107862 -85CAB073714A7211F36E2923411442210A3F063340CFEA003D6F85A0C11B5469 -581BE31AB60EA5247D3E5739393058710F0DDA36CF53256110AB08F5B422A291 -4C402CE894FE9EDB5BC468F379CF47258518A01D28ED3E3941768124F5C71A2A -AD7AA8BEC0D8358EE389CE8EA9AB646D4B9D55E588879AA8566C6723BF43AFCC -0045CB2075EFA3C33B9D2838D6D0E99F3A1C0068231D585B4CC7E81D44F5D04A -2CBDEA50F302603C1E5C67D5570DAFF1D2DC87D5D85C977085FB505E48CB425E -35EEC9E447ED6AC61B28CE95F33ED271D2BF80067D4DD723F8B719AE06CDB75F -68844045767BB1C7356974099CAB81522DAEF863ECF0F0FD272C7826E66BCD41 -2234F07E08E0B0FF5499D0BF2F7277EF2FF8C2BD85C5BABC56B7AB26823F7C4B -D0E53B0DF1755FCDE48804EBA05DB62AB79705B3B2C53C981855C6094D304878 -F6284149A86DB115741C7E6C5CD1D8A0BF4A0BB1BF316A8E0928B9656F0B6733 -59F2516A1F70AF77722D8F4AB51A77C19CD627A7B784C9C24914DCFCCFC64176 -7576B4DC562906781880F6C1560E62584C781C998DA2D127DC5003E8D1DFF54E -541B4AC0B7EE8CCC0C9489BF39B03556B97831028C842E9F20B3510766D8432E -6BCE9C543E887E9D9A6C092887A443C677FE7E900BE4B1313996B4062304ACE2 -ED7B88B8861154A0C216F7EC643C7226414B39E4E6929BB826E02D8CCEF08B80 -006ED1FC42D95E24D9B031915D350885B3E5AB465FE01232D2F27C4A3FC92D46 -DF76B2B123D29DDFE79ED5E0EECD1D22C830FF9BC789BBCAADA52BABD7B66C10 -A658251EA32AE3AE94F98315461A29BB044AD943D7432CBF48F725B1B88A5501 -431F2E748ED9DB9D13FEE67ECF01848424FA21B8FE8BA16577672545D175B37B -EC018BBFC6CCE8C4FB88CFB8D7FA37FF627F32D426A574F58DBCBA705A7798DD -AB6704393E10362110FCED17EEA2DCCDF84C5B449D689E74E7AD7D98618E29FF -3509A62E807669BF1F7F95FED4B1AA76026D656E215D084C7ABAA01E420EF290 -D4ACCBEF1881E199529966845F3182B6233749B0CEC2F7B391783BDBD36E4202 -6A274DE4B2FE4A4BFC9814FD6DA28E9336D01DCDCD574DDFD55E2E444D283128 -D3AB410158380922B04355D6A602C9C90485C0E85BDF27323BF4564FAE8CDFED -5B3AB5829B57A7829B86224096D5F5463486AC860C86C1F2F7DB3B6C94A5652C -FAD0F54ED6EB58255695FE737A235D38632D78F456CFF89FEBD32C37B5B6A5F5 -16FDAB471003158BA994B284051A7F597B42D10EC6236947C5B54E4D7FC7B011 -3940AFE4F4CAB864A07A8962F5508B7C2BFEF24E89F38759C1A024858C44FF0A -A4D4223A416FFFE7B852221936701DD392DDCE8A1F2A39D432A1346B20C5A8C5 -AA6052F7C99549EDD81ABE45BC03CBC6F3BA94CE9682F3923EFC7D564E3E16FA -A765B61A0CACDA6D0DBB26EE38F16670BD31F3221FBF040767CF6D5686971E1C -ACD791939837A0917804CB320195E99322FD79A03CFFF2EB313B9ED7747B55A7 -E8992B0AAABB424BF295C185D4DAA77AF41D0D7D0BEB29BFA5629B67C1C48174 -DC2280AD1E80ED5E429263E9CD6292219AD5B4117166FCC60E675172C335150C -B35DBF4FFDD7EDF7B646C8E1E8BC00255664A2548802B4D33A5C26790658E4E9 -6F3F75A64A48C26F90F7166B48D3FEA6CE661AEAA28D3EBA7611C9676411B1BA -F49EB8E02E41FD3F9B69C76C843DE849696EFEBF9E980741A6C05EB7645F1946 -1FE7B49DBEF2B29F808D99BFBDA0E85089CBA26F5343E7ED1023830F -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSS10 -%!PS-AdobeFont-1.1: CMSS10 1.0 -%%CreationDate: 1991 Aug 20 17:33:34 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSS10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMSS10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 40 /parenleft put -dup 41 /parenright put -readonly def -/FontBBox{-61 -250 999 759}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF7158F1163BDCEEA888D07B439DBD4E8B4C9 -D198C03874B5E6F8FBF4922065A92BC3E66D05DE53971CB1424510E892442858 -D69CE1F76E4DA76C87C763A4B2FE36321E54B1328C9155B8ED6361855A151723 -3386AEA3D042B8D89C8C0E9A33E5DF3B466F7BB8C2C8A4ED4CDAFF55FC6D3EE6 -0AF2CEBFC1AC3A6E6692F8BB81F82D86BAE85016AD62FCB05467082C2E5AD348 -44D1439C2B59F65590E57CA0DE481A7A34E79931B1513C4C30156170409A4BB8 -46D412D1DAF88AD30722F12DBCA1CCC6B4BCC28D06B0D29149DDEC520C8FBA13 -6B82E2E1790F00B216282FF122EF0D47B70A1B29514DDF7C0435ED238C14BDF5 -6DA243117FBEF7398F97EB95597707ED63C6797EBA1B46EA19ABB1DABDA171B3 -16CD500F5D64CBFBE4F9CBC3E66A34427D3C4D0C432710289381F9BFD91B4FF4 -1E3A896C3EEA2F3105C218877D6C0C6B763760FA364D00065E1CAE9DCB5676ED -286A9ED0D1C946DCA6A2A670EE0936FB4706CC62E234CFEED34AA615C48D2872 -A087F30990C85E64BA68F3D5C117123467DB411C9F2D6F6858CC70C1E352C477 -713097321B4C4FD4C5CDE305415F998E7245908EEDE6E056A736EA77BD8C639C -3A79FFD0B74B3D28F0494A115F2841CF8A8827AB5608F96FD8998A5F40FB3DFE -3AA0C7696DE4E1D18DC0D6E84B943175FC38FFC42A9C0CBB13A908978C98BFE5 -034F88480F32B9DEB2FD228FF6CB0B89B045AB02020C82E3F5716DC640613185 -9F597CE262729BC52132F43922B9E28BB71A30AC8709634561B22D13C4FAFE0A -12C4451969226B220038AD8DDA990A4E2CAD53DBEAB698898BBD3046234EB4EA -901287E71CB41296C431383AB85F18882F65BE36923F6C0FD6FADAC5B42FDB68 -64C06E047434FA7A659EF7F3D1AA8E547939FBF9C2ED7AC829F03CA59AFFBFA5 -A7AD2E0FC7BBE619961AE1785D09444B333993199FFED007382B54DDAEBE21E0 -1E75E0AB6D309DBE53BC7BB9F95D342F51798574D70B95021FA40163A86BE6C9 -342536A5730837C522D5314B1289D9B7E4EDD108BE7F35A20AB2A16608F6F007 -6DDD702A5A9BA1325CE2C1CD020DF677872135CF04F4E4F1E9AA6B494E2BC22F -107C331A7E80718B030A1103804D144802E3B03EF7CB083BCCDEAC7B43F1B4F5 -C1BF6016741B741CF7E12B4BF95221A72CC9F4657264771AA69C73DA1DA29102 -65D01A0E61F3024E672AFCCBE13CD0B7F54AE1418B72E357A0BABB4D03073B1D -F4EB54F899AD4A41A9F94DC200880A0DB99D67235A2451B25F710C29A882865B -A922E56E9FC16756014FA5CBDB1C32750BD6835A70EB715CEA19A8872041905E -8C660BACDCA26C8247D6B3C10FA5DC240E433E479AC6AFCF57CF96697FF46BE6 -44748E -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTT10 -%!PS-AdobeFont-1.1: CMTT10 1.00B -%%CreationDate: 1992 Apr 26 10:42:42 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00B) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTT10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -end readonly def -/FontName /CMTT10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 34 /quotedbl put -dup 35 /numbersign put -dup 36 /dollar put -dup 37 /percent put -dup 38 /ampersand put -dup 39 /quoteright put -dup 40 /parenleft put -dup 41 /parenright put -dup 42 /asterisk put -dup 43 /plus put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 48 /zero put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 58 /colon put -dup 59 /semicolon put -dup 60 /less put -dup 61 /equal put -dup 62 /greater put -dup 64 /at put -dup 65 /A put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 75 /K put -dup 76 /L put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 87 /W put -dup 90 /Z put -dup 92 /backslash put -dup 95 /underscore put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 123 /braceleft put -dup 125 /braceright put -dup 126 /asciitilde put -readonly def -/FontBBox{-4 -235 731 800}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D19 -38DD5C4467F9DD8C5D1A2000B3A6BF2F25629BAEC199AE8BD4BA6ED9BBF7DABF -D0E153BAB1C17900D4FCE209622ACD19E7C74C2807D0397357ED07AB460D5204 -EB3A45B7AC4D106B7303AD8348853032A745F417943F9B4FED652B835AA49727 -A8B4117AFF1D4BCE831EB510B6851796D0BE6982B76620CB3CE0C22CACDD4593 -F244C14EEC0E5A7C4AC42392F81C01BC4257FE12AF33F4BFEA9108FF11CF9714 -4DD6EC70A2C4C1E4F328A1EB25E43525FB1E16C07E28CC359DF61F426B7D41EA -6A0C84DD63275395A503AAE908E1C82D389FD12A21E86999799E7F24A994472E -A10EAE77096709BE0D11AAD24A30D96E15A51D720AFB3B10D2E0AC8DC1A1204B -E8725E00D7E3A96F9978BC19377034D93D080C4391E579C34FF9FC2379CB119F -1E5BBEA91AE20F343C6420BE1E2BD0636B04FCCC0BEE0DC2D56D66F06DB22438 -452822CBEAF03EE9EAA8398F276EC0D92A7FB978C17805DB2F4A7DFBA56FD6AF -8670EB364F01DE8FCAFBAF657D68C3A03112915736CEABAA8BA5C0AC25288369 -5D49BD891FABEFE8699A0AE3ED85B48ACB22229E15623399C93DE7D935734ADA -DA7A1462C111D44AD53EA35B57E5D0B5FC0B481820E43222DB8EFCD5D30E15F9 -BA304FA879392EE0BCC0E1A61E74B3A1FC3A3D170218D7244580C7AA0DC65D19 -741FA5FE6F8CBF60250ACC27454BBF0897CA4B909C83A56672958752ED4B5E79 -E18660764F155E86F09EFA9F7685F2F5027EC85A775287B30E2069DE4E4D5712 -E7D033481A53A2702BA7542C71062173039030CF28D8B9C63B5596A9B42B33E7 -D922944A38713383D3648A4AF160A3B0C8F3379BA4372BE2E7EA49AABA75AEEE -C5DDE1D8BF68483C3D21271280ABB91D54CC819680322EAB72E1250A760BC8DA -726405EFE420635B5B7F0B48752C06083E92BDE06401C42A2C528C8A60381227 -CEBEF0C9440DC034DAD9C19FB27DB399BDAEE22053591D6538587C768C1B7B0B -7D1E222D2D8AF3A6473CC4C0D6C3E0DB49068CEB8C9BD1C5CD486A50DAA10BC7 -7D6286142355E3F21DD254E27C00C442728A0BAEC9D3F17AE9CE320D365152E9 -EB0D5E3874F2BCEDA98521D23FCFC30B4B69DAD2ADBE80E5964ED0ABEF6C73B6 -DAD30E2C5061E3747FE536E1A5D190D028F2130AF608F5DDF9DDDF1E77DC8437 -ECB3EC93B33505DF47884DDBD1DC6BBE4098DF04A29AF6FA3AE344600D0AAB53 -B3820DD7ECB600A3B8001C51AF2CA7A39AE1485A0FCD5D16F0657F61E9655AA1 -B8326F1813FEB669F4E88D7C1F3AC239ABDCD32171C7377F7EBD25E7B38A2A2D -CC6F434D57D1F1E4A22F381E957EC31E2211714A3A438A26AD3CB48F0463CD4D -3C0B6E5655214FF177BCEDE954490428D1ABF0CE50C21797E455D0C97803A32F -DDBA51C36537C0B104011AF144043D0FEE36BBF1959020769522A015B3A4F77C -D4AC56294BB989CFE5BE6EDA938B4850D347DB0724353AF84B14EC964B9BCD59 -1D8BD34EE86C37A97CAD9DE966B6612C23069B547004CD96B116E4F72E75AE37 -D506D9FADD61696418EAE950995A0A401135AEAD81CAFC6035C51C38E7ABE815 -CA5D91B363F99E41F567FCEF760C57EABB51EEEC484AB72ABC7E6D2370999714 -1E5B9B8292424474931AA278F716A9314EC34E7468432DEC2EF2F54639BBAABB -ED7216DAA183A57CE0906AE4FCFD17D58C24D5FCD2A2DFAA6BF09C0206CD22E9 -C690E58F9ED3E42F4171197F2A5436A906955B6859FC02527328EB346414A822 -A022439DD30559870FD88BA50555F481DCA6D4FDD3A0086577262F9D73970E63 -E51F78D2372D0EEB83478AD15F449FD9F2A740F61BAFF20CB34950ECBA703C18 -188F61C71220FE9D6EF6AE399AF0A0DBD5145F0FAEBC437AB87E300E3F30DC68 -5C9F034A31E1B2208A0B9EC2ED38FAE85644B1EEF3318B83B65DB758A8F534C4 -587F975B83727DDE95D037DCF497CFCB87A8B0CEF46466826F3AF1C20B6248FB -B41FAFE73DDAAC1F28D9DF2B4B96283DB5AFB0B4BF4BC77963CFBC4030DEB130 -9E95F6085A809C1C55CA7528CB18AE5659B97CE789191095ACEBE4DE36E77BAE -62868382DA764B7E37E26D998B0F1B11E702A222867ADB96A95D2D0B48013158 -CB5B61831BB5360220322B06B40E83B547BC3422AB94BD154B5989A564B0C242 -28C6BB5A72D2E81F0265B42FF6E9C80D2FFEA7262ABD942B5DFA28026C213ED8 -F7188BF6A9697EBE10738FDA63DB75B9D359678278B0A9347C56B1874FCA6BBF -336684C315493454C21A113A8536694D3788080E17745964EF9AB781BFE4E300 -DC9FFA8593ECC54626085F0CF4C29A58F0CB4CB3FBB253334A1CE99B1005D474 -321A9FCAF141FCF33C8A703714F4AE0D13CC2E3AFE4EE2899664CA159B7FB652 -157A0A1B9FB4DAED19CD969AA216961A83322BB5C721A0D3045BA51ABFC42A5B -562312C71A1194869785E52B95F4FB6E05551172CA5723A225D247F94B70ABC0 -E36EC104DF35EC9D3B828711D1C504E3985B66151A53436F7F2D34A1BA5390C2 -249DE9E1C1774FAF61D33F9C93ED13A7C39F4FE175A5855507D4E5BD34293E4C -0B2DF8716BE8B2471D22E1223F2886EFBCCEF6307A5B89F4DFF342EF03661732 -F50E63310BCB76DD35990B51C879333AEF0A866B620B28F1DEF079A303BC81C7 -980D145314ABD0E7D86843AFB41C2506071A845FE3AB31FE4A6799377A1CCC04 -418E44564114157401C86633E565D28CE20708934612092F35D711150E57062B -778F00F9F767B12EBDAE7C18565D7C58580DAF4712A191341FE9421E50900CCE -88C29297090319473CFAA9C1C6F0E35D7FC6CF9F10F44AEBBF800DAB64302F72 -5759BC755BF27BC7FB6F02082A0541C7033BDFC30D8D42B80EA15419957895A7 -65CD33EB1CA613B9A8FF77EF032B58AD8EF314238C7FE95F1B679AB74326E651 -C068F3CA9D2F203AD8D9BB78328D79DE98F511E74F1E414086FE9E226688791E -B7560E6875B5071D3933E1359AE9C9B5651AE3E3E146EC413DF143208ACBA46F -3286BE9BF866F762B9BAB698501FEF48FA9A446DE48509625E452E28A5C3D479 -637B8822F08996105488333826117B10FE03148E63E5449D443F312F1FA75F59 -205E581C337E4FC0873DEBC65DE03068173FD29DC102E2BAAF151AAF0133F98F -830B0E94CE4E88038920CB2BDC3A62BA1017FC5C2E9A018C4174DFF94A82ED65 -1B753E8346315320078D179199F7F3E1BD405D1D7016634157A905FCEB1DE060 -A2B191893D00B070533DC64C6867C36DA6098C236F72C0658A1236DF8CA8792F -3728EB1007F2E7BDFDB4181DD0BA60B400CA843F03DD7A13AA207ED3EF09829E -0BD28A2719C9B02946487C3F2AE4FD533D1997170D4A2DA1CFAD5842621A7D1D -E90764878E5FBF38480E31E46E93B04D43E4B7C999B074E2E81A1A033DF6C055 -DCAAFDF409CA61BEE8C73B0B1772022469D3092F0FB36C72B0F72E0DF211980F -5699E5C49C931A3DFAE2EE88F8B2AAD459765E717440A516CDAB76A9DF252DE2 -A2DEEB02D6E33484C674FC96957D485E66FD625E5039F0C3403B29AF9C64DD61 -645010C7C2B9A6CE8ACAFDEE5DD8AE20265FE8D7C8FED619AABB8B038B6F165B -4E104723948C65CBB0BF5263954A297A53C6ABF631830F9136104CB0AC30FA7A -DB482BAA1100EE9A61C1F8D6522862F80739DC8A32BC913A0BA6656A377A1A27 -F96993C0AA6381A1AC741F3964239CB8DBE83937DDD1F19B5724A444F3CE569F -DFF25DF2C3AAE4B7E05C8B8A57417F21DCD326E230A723C17ED0D368EB6884AA -279F775C902D075EC47C80549C4F92E2227B120F901A5024C51CD3221C21DC03 -D6B380DE7150CF00EEEBDC9E9DA24755B6EBB322DF923807A6864ACFA24A4690 -93E6A9DF113303DD59993CC57452D2DBD33C20B12AAF506EED17A40D986F6F64 -6F0241AA13009825827BBD20D860ADFA572C82B92DAC8C34CF8A730EFFEE9D4C -A20F8DA47FAA3D317A31B5AC22B1D70CA6228B13783524D6D691EA04BE00C5CB -18E3785BE3521DC4651270FBFB28DB2B11EB3A339B308A8FDB54DA6A83AE6545 -D672C8D3E706B46F71153991807E88F3292F01A7E1B6999A45492189E2251F5D -FFFA554257E2388CF8F286E80F22275B743CDC9E886E4D881EA445A5002730AF -BA5AE30A3AA5F08C28EB2A87FB1882DC649D9FF31B80680F8324C4F9F8ABEC87 -24411FC65DF5214F02CA47560F970DECEF3383EC36F4CFF7E2656EBDDCD824E4 -F55140BEF34F501820476B5A52A93A6DC2E6C5BCBC3FF23A9697C447E7C37199 -AFF2BD00D8E89A3B2D48E9B8637E35A89EAE4B168B4A4980030CD3A86F66D425 -B22AB1B57912CD32B5DB582D1331ABB2CD414285A7924535DB49BC23EA3CAB29 -2BA13CBED6030F7B5832351374DF51571CA2FECBE5A1350D3066B71E6D01D499 -133D0B554A6427756935877FB01ACA4FF74B937F39AF455CFB68B7E839BF4B7A -B2C81A989C299677EC5357B8DBA8D4D40599B4FB5FB5A6D088B26261DF6A476A -BACB78C7BDA294D6D41B74DAA6C03ABFA6C8D26CBAEAB428633CBB8532DC4659 -4BF4B97B4591920D029E36C5410AED024950D093049A988DF9C196879171BBF6 -FD711F98502C975AC26C7BBCDF239D69E71A8C642DDD96114DF03DD473BE5E76 -AFD77445F4C1F7A432B85C741982CB82E5096C61C4243269B6A3618EAB43BEDC -31C38F15F09D85EE1BAC19C2DBB5BC03C8FFB21065EEEA0737A2E0B92450DC58 -707B5576BCE4E89689C5AF2DCE7FB3DC4D2B592AE161159FEF9F211228089861 -31C18036B63B11EC60545D482A43AEB754509097C3082687D430DEAB90D117C7 -0BDC910CAD0D70B6878EC6A10DDD6E38EB4516D8403C382D4C41223CA7B43FA6 -08D278D1DEB314CB03C2CD37FEAFB7B551E76255B69E8D2211DF32B233983B9D -E81E5A484DCFA8E36ECC4442102C2E13CFDD7ACC518C144FA06B44893A6B5B00 -5E1525B5FFC203A8FC62F11694700E2A4A2A229C0B44BF5FFC7E7E566AF8B055 -C096B8FAC47D09D857AD239AD6A0E10E36011EE11EA7191FA593E59F95180923 -280E8BB7CD0CDE4707649C0A08B22014266A5532DA92A84A83449D3C31DB030B -F543F95780E69CD74E4EF523705495F48B903E85DA098DBC3FB850CD059F71ED -6AE0DC9D17180B7DEFAC1E1281EBD468A4A8F654CF2FB5E23572CC195FE14D83 -8777A436297D3FEDBCD7BC627D223FD586D3491FFE3592D3E802768510DD3A7F -A422E75835D83D10874E9F4B1D7DBBBA0AF639492366B56770A635A7C25202C4 -569B75C7293545C46E7B371D8FE7B22AF4B1ED670067BD59FBE74F7283E3E56E -D455003DD54BD626CD77F806627F2518E08745F7FB5605A7152EE0F08390AF33 -47821BE929E621CE3DB5CA7244462D83F674BCF47C87591202C389D427B37A1E -36E1ED9EA23E24A086812F239938BE4C19D4150BAF6A9F04BE819D5F404ABF91 -519CB7D81C81E2D624ABA46D40C531FFE4219D0D631A0D375757F95D96327216 -F8F795674532AA64D8B32020F8FBD5F092E6785A669B9D5923C08A8F900BAF1F -56E90553705F35D12188F1104FCB390FC29ABED2E0FC9B731C4ED40946C544CD -E26AFE5DEB68912A5B532C8756640AC31087E7D4D64139898D2E6F69596DE462 -91E664EC93C9A5C22774AC592F8BAFA074558604D54484D9FECE8CEFC67CA421 -49227640944C67371F12ECD524FF392A71826494059657CAF454FC870F5387C0 -3188725BC7F25DE5383B49669AA4339CB0021788922FE0C65C7374D3D2F2A1E8 -400D59551C6BF5F603DA2396FB199656D58304EC8AA7C9AAD8F056AFFDD2C453 -7245001DB1CF6550816E6BBF32CB30E01B15E299A35D55D079E10BF2AC459E14 -1D9DE4DE1643DED4C142B81AA48E28BB11BF478860101A4A4067BD5AF109B9CF -90CE0370184792EDFF55BC58A95EEB80AE685FDD80DF1727D141232ACB248697 -225658511123C3CB048CDBE11E1C6E7CE2A5AA350D29F9EBFAA3913C045A55DD -F64BEE7FED3CA1C5EC310E50E8522F3C1E4FAB3EBEB73B66A57C3CFBEE29FA99 -5EA2EC693D0D0E4B3BBB7456FA27793A65CD19A04437C582CBFC7001E2917501 -C62E2742A24CEDBDF9D305BB9C963D500A330464C346880632D6F5BE93DCEDD1 -AC943CC68D0836DCCD345F786825A522C2AB7C296CF72C8DB96C1A16F8B0C621 -48F546EBC38A5B3F125FF8DCCE82FBE331672E40781F44765D6BEB98BC5F56EF -365A217C72728A96ED69D0C80BE128941357C1E9149A0FD5A3023054F12C9CAB -A087BB08CB9FA6842B4C7721DE3A9C199AAD120DAF05E388D8B7A73800146B08 -9B0ED26E7335AAD093FBB191716E877F78A12E971D17AC3EC33B8A66B18F7959 -D7AC7757A06AB638AFF519DBDD13A35373B3F6702FEB07AEA752C31AA23E6E94 -ADC876DF120FA5F1C359E94B5C090C3E865FF59CA439573A5AA49F0EBA152FE7 -595EEBBDE95968EA675903DF8FDE3964FC26F46FA5DD206E486151BFE3AC88A4 -AD6D5EFB678E6D8A8BBCDE2648F812DA3BDD7FCE3112A091C66075A360FB8BA7 -D59207FAE2D599030BB4C21F5246E69A7D2EE02365FBE9D0CD1BC02839681F50 -9B2E222A117C99F26F271F3E416583FC8BD968419EC92CD7C4FCA2B00D31BE83 -F81A69D97764CE9E5628B82CE4C2F071344C363C2DCDAF071D83BEA3F76C72A8 -243DDAEF2DAD4E483A9313938B8148179EB0E8550B038DD746F868A6A5990BC6 -B87BE72A4D814A74CE993CF39120F18615A71EBE5433B3BB36B6F8237CCCDE40 -65E8D9300BA9E587B37E201570F08FA9E2721B843682C4475AD4F21960CDF6C3 -2A75BF94B7CF2ED1DA55C3102178E12C19E996B6295A375C8EE43AE06A92EC8A -1332AA683BC4C482A116961B151F17FD79D9A5DCE58DFAA03F8EDBAB45501F12 -C4211851344ADE9D1EFA5A2A207A7240F8C908A46F64291006523244E58D359E -827AE19723DBA28D81BE6BC801CEA57EA324F2221EFA51CD299207E7B387B6D7 -B66C036874A673EF5243AB21A02BE1A393B1FE4955E264CD967ABD1B487F79BF -2B387A2B47C16938BD3B77D8A43F6429F492A44426FC16E84D845C093B60D2FF -D0A79A46D01C22CA62BB7E09C24F1AF8D56AA6A11AF916905817C052339CCC40 -48286A871FB787C7DDC1D9AF7AE66B8E7667B289A4CCA798352391ADB9708201 -E251F9DF6CB4733295E53CE5EC5EEC41CBC550C7BCBA80A2BCCA1077910EB375 -5442F341653133493DA8FEAC695135355AFD2E64E60D175AF7C9DCD309F09C13 -8B3304D30CD5D7C4104459C20D81E2E69EAE8A2EA9E4E37420F3197DBE6DB0AD -398D5426847CCD123B598D1CD01F84C148040D41EAA7D6589206D9B84CB533A0 -155587C14FA4DF9B24594B485C4968EFBBD55AC7D971734E41FF2BE9FB4AA5EE -3536B421A4F0CFC06359ACFF92A57F9992B9E871F35D2A2EC854BCDD077CB0B3 -501FF0EB2432811E630AEAE51944FBC370B568F4D2585C0E773056D1CD0F516F -AC1A02C8EA3CD2A8ACC50125B02A8D72B5950411CA46C0ABA6F71015533203A1 -94944681B76CBCCDECB62FD214FA405E24D413F4EB7D86BD914F505F133CB409 -1B93A35F2FFF59EE10C16BD76703594D7AA97AA8C6894A4C13F53EEC597BD968 -DBF9EFD7F25BB20273E21F145350BA1E5948F0279D5D13F315B6D9A4C90BF3E3 -944E3ED4F94635A75A18267546579D67D382E3A86BB2CC8EB2708D2A185A52AB -1C2A776131DB4B1C0A158204555D81EAD0A7753663D565D0F8FAB8AF65CD0571 -7273A1B5D5C48FF093D25215C7801FE36EAC417A66AE1B6DE4C9E58306FC0308 -F39A29896D86E1F539AC06DBB4DDB3A38877793B1BA87B8FDD7D56735181D18D -4C7F72091D269F3C064A571923BF0965CD83999FC15C826DC0FAB85526BB8BC6 -56C737A6BD970EA5483A0457D9445AC8532DF2BDAFE1B3A560E1B3B8ACEBA811 -C7D09E26E1CC7BABE9A1DFB6FF4CC2F06422D39C340C75C4B48DA31A3E904381 -07259E70A86F80C53F4114AB7CFC26984A1E42024FF29185554D99B7C80227D9 -CF1670E12D4C428E2A590ABDF6A30D209111C8E84469303B7E887E20BC153306 -B4920E9135E38D1ADF227CC7C6AE369BD2BE75B8B5EFC43CFACE91E77BF29F95 -0006BFE766A925A71EACE1432BB7A32D48963A6D47341906E6D1599B4DE5183D -4DD62BAD06DB145E17E316C16873A310AE2F37C2B6AEBFAB8F740E293B868080 -1F7B1B61B88257465F18D762A96A1706587ED0D32201010D7C2C9A1E10317804 -17CAE6BAB1B82E4B158C25D46BBCD3D71D79C00DA53271A5AD1FD8B9383B8765 -50769DAC5F9A39EB90523E6D16B5FFDC97EAF49F47DD21DC62F981BB7C9CF11D -47A74332980E6A8E61BAF0DFC4D359373FEFEF52A7F633A06DCC7671E843477E -5EA865D2B9870967E1CF67722651C9D74FB64C45BA2A8EA73656D76B38A5B189 -491E84A948BA65144419F40B3352A2835B170F42C58A0F333FCB1D271C0A4BC7 -8FBC64C387C7A26339EEF291135C8B2F1F670C8B14B920EE77D00F37AB0CB285 -87D47C102062933A40BB8E11D4ADE52CCB9AFF7F64C21B0CA8241D88AA4330BF -B880775CDF71FB4923F0E43DFC64B240B1195F2937D4BE746208A219E0549184 -ECD33BC0A20D8BDDBDB6126D85FAAE8ABD5452FAD1617A42446BEFCF339CC49A -EBFC20FF4E40555F07A9C81CD3E890158FD6A58BAB6ABCF08D1EF2BADEAFEABB -5FD05B061C8C2347BC1A5AD9F6A653CA34B925CE12E5F5BF1696EC1C44D3AB2D -C8E18134A7D937ABFF3BEF5E3211F4DB70DCED73DA1FA2A89EDEB8CE17967424 -5F2C26106E3546B9D9ACC389749C48BBA619393CE649E19493B918B81B6B6E57 -D65A97C464E038C46F7AF946877052D9206D8CAF1A4480EEFC6D95B805670A39 -BEA382487050F25DC205B3572C64CB87288EEF7E7B458024D55F96B24E7A74A7 -87DC524E5A7E3B7F147E2E79A0EDF219E6E3B7BE8345946D742774F983F2EC9A -73F5B1D0E4D4BCF5EEE3DDFDCDC08419E594843FE5D5FD41C72306C6AA43E4EA -93FA44F2AD5E0321533CA468E6A4E086D9A6CCA3BAF1A7C5A96C2E65FD966650 -448BAD418CBE74F12F6F670858FE6E362D1AD40CA5DDAA7DEA5ED5AF2F6FE23A -6A43A1198F2C026E8C65C7F1614165401C484AF0BB292EC25A651D1B359C019F -43E21B2F07239CEE4B864C2B818EF7B7E49C3CFC195AA104C75E72FC46CFF69B -ABC86A00A2FAEF49924FDE58F117484670B655D60404D999E2AFEDAC3B59F52B -5B1DA087243458A85A8711CCAAC382EE27E727CBD90BBCD51414B2698DDEC5D9 -36E21D3B50D897F78760E7EBB39B957DC044A1557C7D5912E57B23E82ED54860 -6E2DB6181FD8C19A3403C2E57C9F71B904DFD85949010310458D50B23BC39B13 -D0DA4EBDA698D75C9743B36128F8ABAF389B19C0F5CC71CDA37E722209250D36 -742A8DEE4F994D1D71405C5855B2CF8B18AA5F2FFF9D4B9737BDE81B62EFA298 -2B6FC900B708F08D909AAB33857FD9C06D7312F7EFC3DDA166A9B0B110FA42C5 -3DB57F5C4E39A534D1088FB0826B81EE5B672033A5210E5CB9F478750DF96626 -34A9362965A7F51F7C00B5664A95AA517FBEA5EF2F9088ADC2447DA282423BB6 -7540FE63C61B564F60F98CBC3464E77AE8845FD13C349E8836A01BFC83924E49 -757C3CAE8240573B3E194E5CAD718A8D43B28CB6770AA4C89D5D7DF98B1FE6CA -3B03DF561DD85A0DB4F165AABDE7636EB7B3177055609FF69D0391F7F31AD816 -0EE599DFBC9B9196F433155EB21077A222146C7B1FC54761AB32DCF4DE556C2A -FC4CA42E22FE5ED9A7C225EB82A070764928655CE7048E6BD62EEAC38143EAD4 -07F325CE53345968BCB486988B3ADF521A440272E6A0BE7AD000D9134F758DDB -470351DC64D38E8A405E4BDD3AE550F1FE889B708F368D85E2DC65D59BAC1E5F -854EAC12D773978D2E46316671D8BD27EA45F422B74113C48353DD2600EA686B -CF20AC731D9A7E7FB7649F1A0878685F5FCE8A9E3E4705B2D27ADDFED696FC1A -EE7BBAFC660A41812E422C4712EFB79F3A29E21196FB53987C706A15EAB3C986 -0353D345BAF4645B12B441F35BA9AB46BE7C0ACB3E84E0A066EF1B44E76F7264 -E548F7022424819EF56C7A917AD5DD80268898632FED22B6057CBA76A0275E72 -69A3B27ECF7DEE9C1D43F2E15BB7A18D24F1FF9C02F1BB5A737891BD4252E142 -40DF98670F0897B9BF3C60E02BD243125C28E177C19A18639F581AB7C5713D0D -618BA5EACEF18947E5849BBD2CF752696436D222A4244B1C713FC4AC9D0FEFCB -2C52B26FA451A61FA9D770212E5371EC2E52A39B8EEFE2967F15504A19ADCF3C -BB25EDBE61CECD1D4E0A9DB5EAF6EF54071A624161F0113E0FE525D83180AFAF -8CF5D27D08B51E2AD43B22539734540E8460D1905A6236E07EB2E383DF6E6F84 -6FDFE96B5EEC8759B0DE0F3EE2B4F984BA6D40CEB8654AAF7094F71C51134E38 -9EFAC887361E885A3753650686E6C6797227211ED0D927DC8ED6E9006D4C5B0B -6EDBF506067E9D237A42C7FA41640A0E2CDD0A71A887BB2745B103FD3941F9C0 -1B1092FBD68B12FD6BF6AD32814CDC85A0AAA9DD55D7243314AD90918F9EEC5D -C0823FC5FEE0D593627BEFF2DB78157570692E6A849FA0DBAA77AAD8EAE7DEBF -336AD33663ACD6FAA6355BC80BCF9F8643A647376C973F8497C6EAE0D4D5CBBB -A8A61CD10FD528775BE2B136C526070BDCA15269375F89731E32A331F33EF1FB -CD242AB1B191E33B532294EB1283CAFA53F8CD8730982BB4265C89FC674D1A78 -E675AD20F8AA1C1DFFB24F78AEAB8BA223F0E31DDE797032AC643E330AC79895 -3EAD5E107EB71092AF2774E0C3F23824E2DA94F4529B473AB6C0081FCBCBD9B8 -45BD11869A86E267822589F4A45EB799BB613DDB85202DD5E305E3D172CD605F -30D089E3AE70A158089469899C13BFB769958C8D37BEF2F9ABD085A40ECB5C43 -9B2CFFB9AA0036A962072C282FC27D8FA9BE1F0B0AB113E80F96A455949DCE7D -CFDEE414406F7798BE6BA284FB860A694E2F81821EB4A95F456ECB407D4504A5 -B0D47152E95372EC6E81B2B91160BDF996614873BFBEB361FB8FDDB22090FC29 -D5A9EAD120DDA69EA88CD80300AE2DDE878DAE1694F46F590BAAF718FEFB083F -A96FB65C11FF4CDD7BD821CACA9A360C2084F96D15C33827CFEA6C6C36791B6E -2CF2CD24269128FD7FFBB32AF1E345D5DCC768CA3101404BE06A9DE762A051B9 -C7D1D87BED457E65C244C8E257451C3BC65418E77256516A9AC64FB58882C525 -E1BC1A58CA5E99702F36C368C910156CAAE4118C12CF1DB5B7259011976E93B8 -88CE0FE1F0B203B3E40E4BCA7491EC69860A25E8A705D3DDAF0B9ED24B30A0CE -7E9BEA705D6D7C02D78341322405F0A6D6E1EAC98C4A7108F9C3A8D10B76B1AE -5F485BB6E359FCE6EE10F346AF7008B5532B05EFC7E4F0FF5580E9BA357F5ECD -5D86E6240E0A0EE3432DA7CFE2D15B957CA669C2273F61F8F92709FDEAD7EC67 -420939BAB8EC9B7BF52D8F19CA81FA95D58AB5F19727157018C2AB45CF258FA5 -BADC36BF706D5B191E11E30C1F4F5178A0C5681DE932C2B37B1402FAE1125F58 -0BEF22CCB84A9DD65EBA52FAC12A115CF3B0CDE54CD88833769ED08DFD9F80FB -1D97D4BEC3692B287BF34BC20E8FA407C675C2E150BE17FF1A0C4008EF3FC950 -BE7A656297838C5737255A18C39CDE6A53518BCDDE82B6A8A43A4685C9350B80 -7F167931298612330A36EF38625F86F8D563A111F8BB3B02D5CC032386C5AA5F -B2E6AA5E791BD1FE540FF315E6D07947A9CCDC04EDBF967E01BA02CA8E8AD66D -C693752CB0F1A4BE087D63FBE452048F2513243ED607BB4541767AE959EAA325 -D0DD64A5A55C3CCE1BFE2467DC08E90A1D9DF87B44E0F0268D0B1368997D671A -5AAB40F7DCC697124C62623466FB10909990A6724A601E76FAC0668C06953C02 -C8289FDBCFCB07A532DF65F562D4FF7FCE9F5166E77A0D82C7F5EA434507BCE5 -0204881294D45DB905DC353EA802F6251831BCB3A874E2E1797061395233055F -AC844805DAA79DD8402BF902CFE23E6589F50295AFDBFEBD6D37CD0B82C45693 -BD22B4C566B99BC8CA4C46B7089E46BA087FB380BBEF1888938A3A554BB9CA2B -45E206614D29DDE153C3A5CA8EE3DBBF1D77D2F9905AF06BFF7660CD63D92C96 -D311734AD82D249B249D30EE70D76824EF0A7C7646DCE9A3C337DA87B582A74D -1B30AE0C5E822C352FF3C5DB0BD0F367275EFFDDB50011A5C39327ADC6A951DC -A4C80510E7D96ACA191344AFE2D1A5EAAAD8007EEB8A51F581CD7EF460C87807 -0D274570F8B651EDAA317E1E50B2E194B6F762E28CC7D4B1477EB9D31B46F78F -0C73762DE4A83B9F31CE2AAD9195712562BC40628402843328B1E1AE8D6F4298 -AF7C9C0DEDA42B5481BBF1AAC4E6B3ECE92E6AB4CF48139214187BC609F3B6E3 -D4F1F909E24AA654954B103BB89BD36D9F76C48CE7A0B17C6BE9D8E24184833E -391A96DBB44B1C9583B8EDF7287A52BB43187F651E4848649EDAAB1DEC3C25FB -79FEAD19E901284D1E84311DCBF128063973A32FF6FF386B46AFF18BF1E7C64C -18B069DCB3E5B96EDFA17AD846496F69C1F00DD9B81F4D46B004DB63FCE9E27A -CE9FCED4E121B8FA784FAC3A49032621CD2BEDFA831B42F73814A97D22B11E1A -38D3FB4540010715890707828B3CE11B17D1ABD42417238A5AC472D9C8D8DEE4 -AB6736D60759A1003A38AEAED363C71FBD05B51DFFF7D8782B0F1382E9C6660B -5E35E1BCAC6C69A64CC0B62561DB8C47FD8A9269969B9E6CA02A1D18C0456D65 -C24DB4D14377784EA7490A2C054F80C7569FF90AD1E264B1E1EB3A9A8E0F24E8 -E31C4D63ED7BCE3E6444F485278E4451DC1CA432CB51083F22183FD92466BBF7 -FA4B6535AB0DF6DE9E4894A9B4F135D6C34A16D4D03FDAED260AF506117A66E7 -FA012B2A97EFB0F819B2F579B99C9867D97AB6E6997C908C7D4CA2B8F305533C -A4358230F2F1D1CD48ADF1C0A82F79DE6419A1ED438759CF1C103A830A1C1D77 -F188FCE9B55C8E17109B9CA82F2DB0ED325FBD1B06A84F72EEAAB6D8D70189EB -CB5E4CBC49FC1CDAD7CC380D54F7A98D62FB841FF387356FE397293CF0BAF503 -33B992EB79DBC524868D2989CB59CAE125162C1396D8807F02D84CEE97A3DA5A -18D432F6FDFB91CA7124C135565BB5CE067CA968DD62F8F19733D7B246522D01 -AD892793950ABA979506F15AAD043B4BA66D6A434A74AE41CC84F181808620EF -165C9C02AB17C9944EB9BEB185215FA79E1B3AFA7E1D5DFE062E35A0939D041D -6FCA58CDBAFA993EA430DDD3929CC16A75C7D667DC6AA302C24060CF8F9890E1 -56B99508CA4FF83053C9EF6AC3FCA0322DA0E01C9C15560363DBE82CFC54F35B -5C436943AE6F16C8E99AF94FF64EA384AFAAC1ED0C2A966924BA4CBDB5BF6ACA -45541DF9F9755E0D5CB9B48530A49427D82201BE60E1CD3BDB389F48447D3BEC -FDE1D3A32DC028A457215CA2A3EFC1F2E4853291825DAA8FA9DF148FF67C3299 -3C03AABE7A43133D07726A6E98FB8D4A1726AE3A142B5032A7A3597197B47604 -3A3EBD6CF2F410F7FB49FB6CD0D6772D9152D0328DED242054F11B0F2EDA6831 -E36F5B24A45CBB204E884BCA15928615B2397AA1E564E30F15A495C0CFAE9079 -186C2B481F7DE57E3CC324525AF90C7382A6C7445B4BF2BA89F65C4B14889E19 -FA79BF4CECB93C5940A8F1C98DE3CD9E73BDE466A6D8A804B732B526AD4BD51C -3BCE1F2A49D7F96D4017F9C79BF0E7528E6EFB666E14567E5C60D35D0ACDDD32 -CDFE5D1CF0238A9744E66FB66D5680C24694A88406BF44422DF27E4B2E5C25EA -C4FB115E0FF66D6A646131FCBB4F2E621C5AD9EBDC5BB04CE4E029C957152D8A -2D7941E84DF4693A8F588047D70EE69215B0B0434BDB60C3BCA352C507394522 -4B8DA22531827260666D1A719973713153F5F071C0F2EE18AD6A65466F414C78 -78CA9535DCC0E1E56D01F59AAF961D2275EA14DAA97B873994D98C1133092BAB -589012509E648CC303C60C82F7346F897AA20151397BC47A4FCA4EB5224418E8 -F877A5CE3267AD3C3E28865600649459D8898224614157326BB6C731B0812895 -6D09851A2CD0AC24E3564EBDF859F795BE32DB1DB06FA2601CCCFB442885252D -565FF2F2CD53399BCCEDDB5552EFDC6CE6EFCFAE5077D7E2EC26FA50E8EF83FA -07331406CB529C10C2E8834C6DF8A03BFC4460CEB7B0A47CC3A2E5D3F7D4595E -D19E181443CE00C992B97224B5F044EDD6DF15CDD48CA29F6976E41A67FA94CF -312D7B5F3FD4F1AE0AB22444DAF14A6563A557E0AD3BD32EF135C8D1281CB608 -15EB09CAE15F4FC36E3A4FF5CB55DD29CDBA97EC9F0A480BA4D809F389F2D8EA -CBAF9FC3CBC1BC601122823A2E095D5F46AB81E10F7D6E9E6A41FF12A7467079 -E0CC02AF9D4F50F6CC53C16F183EBE4FA08C6C8D14FD51E1D4FE329525647F21 -201FA180DF3792CD3CD5AEE51340B026239B9AB2643C921631C1111712621C78 -C016FC996D1F7EB658A496CBA87EEA09C23020D9FA3D467BF71D6AA1C1D235CB -BD4F5F76D7631C4A104C91233764DD7805CCEA7D07C7564F2DCDFB03BBE9431B -BAC79C9FB93002787873B8A6936375F317CB3A2E4BA3E989FDBB2A0321790997 -0241621DD47916EA28415178B127DC9058093250D6E3730F8C57BA3C04EA5170 -7A327543C9BF4A8161334F2C4C1DA720DFC24AF5EB127E38067A12022AE64034 -32DACF7CE8E25B2B6DFD0896F509A89668198D67FCD7472E903FA33501B9A32F -58491A9F669B98A25ECAD38523956C7EFA01E79AE208F5444B12314D37CE7EA8 -EE90E036A59636D687AB9F56578D9E5A184447A638284289AAC1315B80DC3B19 -1C8D1FF53A5FCA26655D2E4BA6D8779F1E88EC3BF28DDD22140BB975FDA72B78 -02E69808E8607D93584F4CAB6DBDC1789534FDFD6B8719087D6C77992FB5B640 -5BDE8C8BFAFE1F9B691B2137BE874B1A98DBB76576D40AAD985F8D745340BB89 -F95D3EB90ACD2AA4FA63E47DE606E16A78762DB1533F04F0AD55423C2DD5EBFC -E37EB91C7413E95520E9AF74A85B6BA31372CAC89A91DAF34AF9EC87C1E5C19F -7EAC8C50F30CC681B4ED75C08197F7AD6C4A6C95C7304FA56732491A4C667631 -8E4B6FCEBB9C8C186536B7B382B10210D157ED4F3FC5A4F040EB9EDC43C0D70E -829AD7297BF6514FEC0ED86504C192AAC7EC3B57B190AB635B95B36C168A4D1F -1C7F2CC2E90664D4F0F69DFEFEA54D903D12CE3121A9767C14170FFD867D3D48 -42C6826642AE5B6A5180E3DE0D42170256735CAD47B26DF5068C74310D99F9BC -04EA14BCFD1F1BF51DDF86B4566D89AA583709340C7BBC3665EA29AB1D061938 -D449A03AA7EC41B595BB0885ABC137B0EBD834EC4691AD71FE0DF9D30996FDFB -C359A5E109C5EFD0152D4AEF651389BDBDE763EE2C1AA3C7897135F8FA97F171 -E3FD9E1D95AEA8F2D31A4F2F18F45250B452AC3768B1C7D728ED1F4D27BD0467 -CC6991ECD1C2525EA4BA1D9ED5EE70C7C9BF579A6F04F12E34AC933276D92FAB -F97D45AA75F1CD0C20701F5A9480FF5CC6DF6C8553348EA0A241B44738646394 -DA236F88F53D1A183382B420F6A0D3F7871A39E578BE8F883BD0C6B03BD7EA77 -24E3791D1D6BC2753F1F84EDF2B242A7DE30B354F1CFCFC3A429C427250D2057 -1E879577A62DE28728F96F1BEC12E1BA409D66435D587711CBBB87168E5FD45D -4C405B2D61E223EDBBEC483010D21D8E6733E6314794ABBF19917A8506B37183 -0CD6931742F24D1589F27EE6CCE04360E0B1C43E440349A731CECEBB62AB59DE -94E738713F87322E6F4B5F4D403426FEA0E45E23F32746F37B7E0E31A69F6EC0 -DAE7AE4C3EE7DE93AB54DC3325AD405F389814F7622BBBA247A3CB858EC62AE9 -D2489E2252E0D1C0E7AE7C14E5B72E18DA81B4F14FA56AD21BD645FBF3334591 -9956F9D4DB6018FCA070FEEB31E6CA0638DEE5442EEF99F9F0CC4675EE3CD551 -8004B682A1649B050CC874DF5FF1BC5DB4D33A5C6CFB4E529D33A45983047778 -96E38BF80BC18CEEB6CDEFE2BA8F65E51EC9BC43E15E17CD9C64F45820962B40 -0A91ACE263E8B78F440637FA55F506163C8553FABF89662703C094F2EC622F27 -F1D83ACBD9CB18FD179B172DDAF278625BA1CF5C2065D25733D9942A851751FA -B2A9971A050370B56215C98925E74AC36B2AE4B013CBED8F23C0458EE99C9D11 -B86272D90D984E6C05CE153BEB0C5C2E7A66D8524778C31D82EE325B514F237B -7988F1A94394F498288B4401D4B639E4E819469A35FD4764BF0D0354EDE9E046 -DF7932C34420471647FC91AF39588AE076987CF39145C28CDF3C82987E7DE26F -EB20F52A9E2050CA53B8EF1F78B846C70FC4FB7FCAC52D5BED0287B01EF7394D -08E96544A175405D0C2BE4F443006D1D9348346CB2AC9FF48646709A2BF61BAE -0059DCC94DB11EF0BB3653A44D8CB7B3275C01B8B6E09B0B389CD7EC5148F2A8 -7AFB64F0E4DFF01DAF8B29E628CC2137924CF68BB433E064FAB734314784CA6C -AB3771A5BD98FA71DFA8806935C14C9016F3D8674182E3DE603B02D20348F876 -A413255AF23080DED1D288549C4685643A3FEF2E16D05A93CBB7F5C69DED541A -B3927E22DD1632537CEA77ADD04633D7BDED8C988EC6770CD83F48B74BB32149 -9BE1F4C5364617BB1635336EC1D442DB160A51ABBF8AA3DFB9C93E20D9BC0951 -98AAA43E29527FD9BC3DA340B7585EA73D5180969EA00BA4B393D6D88D33F7BA -E4B2736AF1FEC5F24B64D6C64428CCFDF53F1CBF3DBC36035708C593258CAA8C -14611422F204148981A15D01FEEDB3D98551DA34357751C5F47591656C118F5F -BA3452E7CB4F08F7CF7F1569B37EB2B64E8CAE7BF42E06DA94B3B261C01D8523 -141E1BBE5B1491C0E6968C4337515DD0C0CC523D6E1852695E6EA5ACAF98BBEF -120E44166FBE2F0EA02EFCC6AB694BBF56A522FFCA2F3C2D43E5533A6890F217 -99498AA38260AD3A4FDDC0521964534A74F99075934086F01E761CC37DB5DEEB -DDAEB22354D17F4DB58F502BD23D04C2B23410C359E1C0B5B6AE4C45D929D734 -33F500E907D9FD913E0D174C5B01FCA305E006638376E8E2791C39D0878EEE91 -A72942E0F4637169DBE7A7089A7F9C0499CF1AAC87BC8F676980E0B99AC4ED8B -33F0F531F25392C6B35B5C91C649BBAFFC7E3312B2DE35ABC74C6E52BC042B6C -A013F7E6B73FBC32E12B2A24CE86FE30D727E7A8F4D70CC52971398E9276315D -58D5F787068F3AE820A5FBC0EB7ECCA3C5A5C316CFC77DDD23BDDEEBA20239E3 -F3872B6934C4AB3FB522856754143708E6D8BA83493723494329E7B864891A6C -5866AFE1AFB3E7B1C589795D073A5FCD201222A848C2044E5DBA03A154B6D992 -AA0614CA56BC35D679BE120AF3EA4F5D65C9DE663917897D4001305735D8894B -C4F92096450CF3B47FB0B0E4E6B703F70936CA5F86CFFD0DDAC00AED05369D2C -5F0FEDD9438242D96F5CB8B55BCC9BCDEABDA9BD33194200C4C4B6BDDB84732F -DC9B6D4340B9D1CAAC41097CB74F0DB903F563BD0F83EAF9DD3F72EB33800B9F -E03839C6C8F58A554F2A6AE4C5D87DEC7554A923E31D992E582F8FA3D87AB199 -E1C9485F60C453126A28F9D713B0703B2E5FBDC6FF9E43DE0042152F81EA13B5 -9F87C01DB8AA4DC7A79A1A0C10F953E284D51990849E20C5F5830C940FC96BE4 -9E8B8A4B478CE51B1BAE7E4F37126894DC9BAFC200EF9E366A4D054B80500867 -31E8911B0B75E16E690638471822B07ED3C230845ECDA423D7AF521BB5A8D230 -29E019DCA98DD25A0E3587EB037FEC117966A28717BD96EE6BBFEEABB437453C -9563CACAF9F3F0BC5FF1805A596B1BD178ECC82AA33B31A0DC874F31159A64B7 -58B8714958F49B334C285808E051FCB293239C364DD48EF3555D0E442D60517E -168F8D4480DD284A1B8916130F7A3CC9BBAAB9F95E43C59F8A21FD739523BF98 -D5D851737E3CAF0E5439FF63BC9051BEAEEEDFEFCF491F586B1AB7D8CFF61BC6 -0901EA7E4C9E770A4BFBF6CE909E8A6DCCB3819438D70088BB3F1C87B776A4C6 -A90D03F224851A1480B468E249DDAB7DE3212684B258EE29194A26873ED61318 -492C8C9091F3DDF4094428FEED2B39E9667E8344CEE8E93A7C89137EC66841F4 -51FA538E5733606B1998A7EE5CFD4267A1CB0C01500503EC8759A825B395172D -DEB3CCDA35F921175EC34A414718813BF9875D1DB7CC6513026B0A9D4D851183 -DDF5E88913EEC31201F22F67773D1DE48DA44DF515A9AA924853E73ADCA771D2 -5F2AAC342DB76EC44D23973FD8CAEB7E1E5303F42872AC1904F4EA6790CABE65 -151EF130A25983B375E9BF4A5E5514B56CF5563AAF41BCC9F5A8DBDC9E3EC344 -C387D43912FC70969FC7C0B6BE5DC1E0BFD0CC1264DD729931396E99D9BEE3D3 -2339B4803BB8185697820D646F8CC15451EB9D8D26124B5CAD7389A8F3F5DC87 -2DE9B3F5A6E4BE87AE282E8B8FAA9EB0F559A369683436E6369AEB562DB3231C -ECD34DCFE68E8B660A3ED80C0CD85E4B29E56C93320B4434F59F9D36D6F9AEF7 -1001305EE280CFD4C7F84B0CB42C8F1A2838F78C08A041B3827D277831A8C49A -54 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTT12 -%!PS-AdobeFont-1.1: CMTT12 1.0 -%%CreationDate: 1991 Aug 20 16:45:46 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTT12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -end readonly def -/FontName /CMTT12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 105 /i put -dup 110 /n put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -readonly def -/FontBBox{-1 -234 524 695}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F0364CD5660FE13FF01BC20148F9C480BCD0E -C81D5BFC66F04993DD73F0BE0AB13F53B1BA79FE5F618A4F672B16C06BE3251E -3BCB599BFA0E6041FBD558475370D693A959259A2699BA6E97CF40435B8E8A4B -426343E145DF14E59028D4E0941AB537E34024E6CDE0EA9AF8038A3260A0358D -D5B1DB53582F0DAB7ADE29CF8DBA0992D5A94672DFF91573F38D9BFD1A57E161 -E52DA1B41433C82261E47F79997DF603935D2A187A95F7A25D148FB3C2B6AA32 -6B982C32C6B25867871ED7B38E150031A3DE568C8D3731A779EAAF09AC5CE6C5 -A129C4147E56882B8068DF37C97C761694F1316AF93E33FF7E0B2F1F252735CE -0D9F7BCE136B06EE967ABE0C8DF24DCBBF99874702ED252B677F407CB39678CC -85DDFC2F45C552BA967E4158165ED16FECC4E32AC4D3B3EB8046DCDD37C92FDF -F1F3710BB8EF5CA358ABACA33C7E5ACAD6BF5DC58BDFC3CF09BA2A38291D45A4 -C15FF1916FE2EC47FDC80911EB9C61F5D355BEDFC9DB17588547763AC5F0B1CC -12D2FFB32E0803D37E3281DA9CE36C5433655526ACFB3A301C56FAB09DF07B5D -048B47687348DEB96F3F9C53CE56DDD312B93D3918CD92AF53FB9461864D11B8 -0138918D0B1270C54873C4012CDE6F886DB11BCEA04B023EBB43E0D0A06BE725 -741D08B9DB688731A6C9886C15A83C28DADCC81385EA239E045E8F3670CE03DB -9EE77ED067036595C9F3B1854343BE3A12E486B6E5A2F8AC44FA5378D28DCCEE -306B0E283AA444423F9A4FF38E2B56DCF67A39CEB2C643DAE86865517D5D0371 -CB8797208ADEC637330A3A57902C9A88EDB75A7C16FA9850075D9F19578EC666 -1353CC1FC512D59DFF847ACCD3D03959C548F21BF622A6C3224EE815E753BC87 -E0364A12A1728D0762C266515BFD30F7711A9F1F796BC4BCF679918151320681 -D3202FD01EE5901981E7EC55F58812978105DB71D10B0A5A39BB69F703B11160 -71E527862BBC00736D616BF295EA94ECB611548BE15829EEBD0909514403608D -4C7C220B61E9F004D1CE7760F7D96A75029244E5505A2579171BFC831AA0C18A -5D09BC573A582787ABBCF9C680DC4A5F41F6D7208A4DE3DD4E566675781B86D4 -7631FB52070FBD290AE6DE90DDCBECF4A71A9C04A88F4DCF468E3256B3E240D9 -86688B5DE5C0EC734599CC85478045BF32033E14B99C532D3192440F4D23BA99 -AABC774E8978CC4CC681102FECA5969C404FD82F9A0E9F772ABA32D9A309E140 -C33E65CD55DA1973802702A9D38953F95734097864C045690EB370F9600CF504 -1D8C256C3F54789A39130AF465468B2EC43496CD305352AB5C50B19B6D025C0A -8D85950ED3DEDCE064098AB2EFBE0E5470B1553AAA691B108AC28B169609B244 -B9A4596E9DDDBB5017847AE359E7CFAE76951CDB353ABB5EAC83026FDD24BFA2 -40899B9A904389B04CA8EDD18D19574585FC843F2D8459EDF6A296FFA0047F3A -7D08570D877CCC8AF22684DC4CC7BA11F5E2296FCE728087D5394F3D2E4CD157 -399E3BE34CC8A97E4D9B7AE8A54747C945C23C3A2E3C07307815EA77E3DB8F02 -FDB2E31E2EFC2F4FB10A6CCD14D6C5121AD7DE0BC201BDAB24998DF9797D7F37 -8C00252AA9783E54023EED68AF1D0A7C3DE94C0D51DFD79F6D1CECCC35FCB852 -C7F523D4CAD562FB00A60835EA49753F176913C4B79708A071CF88E1757215F9 -4844D934D0F0DE9E79A4E68328C9AA900C8351B7A51B5504C651FE9C6832AF05 -72A710A16C7693C544D585311E6F81BEC2C33BC8BD3FAE4E82B0DDFCFB1CE847 -B4BF65F30AB480B329774BF6BF1246E2D1F402FA72F4298B90887DDE0AD09DB5 -4CAAC75BBD2437B7B50A9F42206421D0AB69DF3DEBA9F0134BD699BB223EA67B -B65E5BFD4575E7DDEF810B768D568387AD94DE8A6673134B824C78AE36D0922B -E21F10BA2267BF39AF9D7C06E64A467D96A0F8C4B6733BC9D801FC391D426B46 -7FB6CEE46D3C2DD27770565774258E5F2C5773D82F491039976FC29DB4E86213 -0A4D9491E5EEFE362AAF37F6C0FC0BD6C285CADA011201809FCE904F0C558834 -FF6EDB62354EB38795A4FBA53A670912FF984A2A702B9898D4723FB993AD10D5 -E8A3CC543EDEC2D6CFC69E6DB0321010D6A7FC357B9B6292A9F6D5BCA1FC5B62 -E769CB1BD40E7711A0298D1A425DA896B11A68DB14795FFD9FCBAE6C35DD3FEC -6F914A57C65068473594716B2CE171E7B59270B129233571D0A5D6D477907286 -70057B799C2BC43735E2807CF34BD920C25B736BAE8034A6B8CC5E39EB4B7989 -84626CC8667E5912BCFE3C9FD65DA80D6CBAAFA6795E8B9AB9895EFBA2C46704 -64FFB18CA92B5215AFAB89876C41E34E5C1F14118714F73E516210C21D44D038 -F860AE5512AB012BA7931B8411359B63E6013B3599EA007B774D6B6D85E872DA -979837435B5EC037B756A26BC1DACF1050AA7884F3D694CC4D829688D599C994 -3352EF1436AACE4E456C6C8E1DCF29BC276D6B2130EFA0F2318B7904F3391387 -EA5650743E6CB1768F4A9ADEB48378D1B86513FD8BF92864812921D262407DEA -276AA0A2ED0C36C7678DD04C5975A8D9CA8A315FA127DB1DE6AEBDF79375543D -654BE2B92AA5BBC5461CEA72A689751C884E7139AEEFF88BC589DFC285CAA007 -FDE71A258B28A382967D314721B5D29A2D31444C9EC9A3481247E6C878D3BC6E -43FBDE0B6E18B7540600F0060455FDB2294C88A0C67D635103151F8FB91696DE -D372C14C3742AEFDA7DB3A5719CAFC7BA3BAE587B239F2D55F33C70347558225 -1C2A16490B20E00C8976A27FDD326D2151C6FF53CC045D2EC1DFC9E01C169FB6 -AD694DB6D8CE3489977471CBB867AACDE52F245BCDEE90C3A23F07BE0E7E2094 -7937446BC05A1705D86BB65AEAEE557E4B922C542EFB6172DB59FB9B49785C7E -9DFE1F47B9FE21B6C0D6436EC7E8B1A057B8AF5128E5B888589EC1307734D22D -C2B20BCBCC3DE667F067B44E9D0C9BB639B054CE402EC991B5B12F1A8E2E6BA2 -E50CF2D44A7C4C10EC7DC93C472B75ECEE779FCAD56FB7F293314ABEC48CCF74 -B04B2AF9078D0E57E936440867CE1BC1FA8FBD944E3EA779BD89977B7C0FCE9B -6B2E4F4895D91654FBB5788FBCA84985E90E92E5366CC32DC874B51ED2281CF2 -2E6FE6BE3B206CC18FE73233F014451BCD5D8C2F4873DB3EF2A393F62D5CB2F0 -B98CB8D8E19DCC6F885C4E8F7BE5F96BC34661DC6FFCB457F3642866D393DC45 -FE66B8AB77F95B02ED26A9D550860BFA4AF0881BBD5D0F01F035FB466CDB8C9D -B6406B2679EFEC268CA1AD8D4CDEE2D47D6EB641D13AB7F3151722588DE3E2C4 -3EDFC0BE4B9A65D0CBFA0F369C9900CC105216A86DB6FC9338910DBFBC4F3447 -531A32AD80C30F83BE7183E30D9C49D00CCABF3C615A94917851D3145F7FE82B -B62C60EDD92FEC634274679B1BBCD979F502CCE2D76A7A273D071BFF9A6EE664 -D88B56896613CEE8617A239391A3140C55D8EE40DB0EF84E1E6F378CA62073CE -D0C24F98F07BC80875B0D07E8D449344826CB71659AF33E196C925256B11A737 -066C9A1FF0BEF8C90B068024B012A25E605F1CAB88856FCCBA52F23ECEB9091C -368D3616332718EA80A122C74089B911DA55F7AB3E4BCE1C -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMBX12 -%!PS-AdobeFont-1.1: CMBX12 1.0 -%%CreationDate: 1991 Aug 20 16:34:54 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMBX12) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMBX12 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 11 /ff put -dup 12 /fi put -dup 37 /percent put -dup 39 /quoteright put -dup 45 /hyphen put -dup 46 /period put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 87 /W put -dup 89 /Y put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -readonly def -/FontBBox{-53 -251 1139 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F0364CD5660F74BEE96790DE35AFA90CCF712 -B1805DA88AE375A04D99598EADFC625BDC1F9C315B6CF28C9BD427F32C745C99 -AEBE70DAAED49EA45AF94F081934AA47894A370D698ABABDA4215500B190AF26 -7FCFB7DDA2BC68605A4EF61ECCA3D61C684B47FFB5887A3BEDE0B4D30E8EBABF -20980C23312618EB0EAF289B2924FF4A334B85D98FD68545FDADB47F991E7390 -B10EE86A46A5AF8866C010225024D5E5862D49DEB5D8ECCB95D94283C50A363D -68A49071445610F03CE3600945118A6BC0B3AA4593104E727261C68C4A47F809 -D77E4CF27B3681F6B6F3AC498E45361BF9E01FAF5527F5E3CC790D3084674B3E -26296F3E03321B5C555D2458578A89E72D3166A3C5D740B3ABB127CF420C316D -F957873DA04CF0DB25A73574A4DE2E4F2D5D4E8E0B430654CF7F341A1BDB3E26 -77C194764EAD58C585F49EF10843FE020F9FDFD9008D660DE50B9BD7A2A87299 -BC319E66D781101BB956E30643A19B93C8967E1AE4719F300BFE5866F0D6DA5E -C55E171A24D3B707EFA325D47F473764E99BC8B1108D815CF2ACADFA6C4663E8 -30855D673CE98AB78F5F829F7FA226AB57F07B3E7D4E7CE30ED3B7EB0D3035C5 -148DA8D9FA34483414FDA8E3DC9E6C479E3EEE9A11A0547FC9085FA4631AD19C -E936E0598E3197207FA7BB6E55CFD5EF72AEC12D9A9675241C7A71316B2E148D -E2A1732B3627109EA446CB320EBBE2E78281CDF0890E2E72B6711335857F1E23 -337C75E729701E93D5BEC0630CDC7F4E957233EC09F917E5CA703C7E93841598 -0E73843FC6619DE017C8473A6D1B2BE5142DEBA285B98FA1CC5E64D2ADB981E6 -472971848451A245DDF6AA3B8225E9AC8E4630B0FF32D679EC27ACAD85C6394E -A6F71023B660EE883D8B676837E9EBA4E42BA8F365433A900F1DC3A9F0E88A26 -331508EB5EA0129B0812E2B888CDC3CF50E799B3526B3BC1B4A0749412BCA144 -8E4844C61DBA2D3BD966F0020C1EF0C843C3E9EC57CC4DCB9DF8FE98B599D82E -E85E4F60FB8DE19891564CEC09C5E23FE7A76B2178DE7154E823DE4E67DC3588 -DA00666726997B0F8ED5515D0D87A8EBFA3CC83ABF6E64AAC0FDC4EA837FBDEF -4A7D617AD4EB54799FDAD52E42A8E688F92DD2CC772DB2FE6ADED79DB8D5B322 -20494FEC6D794D5FF8F6179365F6B4B3F7DC24A475C262B9C5179A8C256002EA -1EACDE24D7BAE607303D20FC50DFE1E923D185F8F391B2E82579090E3C10107F -673E415D5193AE1B85A27CDCE97DBA4B8F657C84AB0E4CC87203EE17685F38BD -3697BEF5B063992A01EADEDDD8F6E50222398B2BDEFCF7212924B5B4CFB860ED -48DA76261A36E61E0547EE52F3AB88C6258FEAAB6B8E8C00E58526A9491FB194 -A9EFEB7271974D9B775B8B6AF0711B6AE478D85988327CA589E7194A609D603E -F1ED4BA97C8F517EA2D30DDA5B9D56C7778655746971D2ADCC702C2DAD9BAE06 -AB7679BF6F95541424D734ADAE0BB32A4D9C768E2CBDFA303C6DD654A94BBE16 -4FA5311D5710F5D6C345C846C755E6A8C382EE27E759813293E4E29F5B46D596 -5D23F82E20CD41488E941C783AF1B25DFDA38C1C63F87B266907F732BBFFD9DC -53AC7A64D36CC2C3B0117C8AB706DE2D4E133A395AE5E613EF2C1CFE1FA1A281 -B5122B081A5A50DE24D101AC0A5B9A944ECB3C0BEF9368FFF82CFD441FEDD4D2 -42F92AA0DB89F178D796BD67F2DD6FB2337C5AC28E43DEAC3E506381295BFA80 -526270405AD9F073A6AC3481C148612CD98A69D28D3DC37F8E888D98B6085010 -5FC8F7886CD169AEA494D587FCD51263B165BC9E9C4AC78B42147880D72CA57E -D3167AC9B0249E9DAD21A36429C1F2F68B19E4974A4C6E23DEB1EC139879B619 -1DD6784815BA75AAE38412E64FA6C90E632E72F3A7C2FF5EC94A2A005523C1F7 -6E49EA466E2657E1A6275CBB04535BF1A7FAF1F4909D3D9159975E2D09961157 -C7F1E897F37C1D9AB918374287746470B6B150F0878DD937D7EAE0FAC0D73E81 -EC97A6E8AD3C88140938702C9C7CA7B71862C8DD2B15A35A759E059187F23210 -A05685580D5838B045E22BF57DF64DE8552D0E0B26DABF29FC2C364B8AFCEAEA -45A4CB9398E02E7B39A5728233F6A9B0A4D9E2A75798E1DBF8E5BBC7F57C2F15 -BB8E264D7B2754DAFEED40C973FECCEA8B294629377F23B339ABE8859C3CF709 -EAFBDE011B2EDFDFC212FC6017623B615DEE3D1279526DBC4583FA0D8F1727C1 -7C50E3CF94A61AF64CDABA10F25578D6822B6CECA9573E13DC80B9D6667FD381 -7AC2CD01C697864BD647E93443D8A2B995A78C3677B5034BEF367F3944FD7ECA -5B92D73E5D4D863E9FE11EF1528F5147EE66477C0644B1A2E62D554C9DB118C6 -34B0C08F0C013D156A3E65D855A5E4A0ED2310E2888141369A97532FE1AB979E -208997056265D86FD622A3DC329A758BBE3DA86C73B415B94A63E41EEA07B7EE -D83F2FF12160F4725AF9411D92F928265199B240B28E4231E224AF5AD7155621 -F542EDA353B5683BE4683EF7B6E02C8B42C2A820AD074699EA44292C87759F0D -5CD158332078DBF07CBFD344CB30FF4029CADF79266188819C429DB8F0E713CF -9AC7E74E7412E27A4DD9F29E1F5DF025087E1A4CF149A890C2E97660EE2D7124 -516B0AEBF00188807240C3392289F1CEA651895CFB959816EA4FA63B06000742 -85BFC4B9BF76701B51500DF80BAF7D216505F92DC7906EDE5D297D675FFE525C -11E3D3A14203CC64839B27CA804C95A687D24C244AB726D9EC0F5A043840DEDB -A1254063180F1CCCC3728B2B58084D3C937380F0D3C9AD1438C628B8B1005CCD -C977368AD58A96AE21862F38776C1E69A03D4B4DBF909B460D6C6F4C490DC648 -7F80010C947BF465016CF687DE437C5FBD275A7D81F2BE27FF146E769D10D487 -2865EECE32BE9AA8E8E273AEE75EB28EC4A43DDB71080A06B4C3A119490B5C9A -0AE1F8039A78A8F7A509BA89D89DD7E897D93DA78C2886B994260E3FAB054874 -41E044EBD3DD04B972F1482157ADDE2AB6CAA5FF83306F661544897781418A61 -FA998C0B84D4FED7650128063DAB2DAA3815AD5ADCE8548317230B7A5C8215F4 -843C36C634D749426F9C5C25168F9C1931190CBDD21CBFCBF71C072B2802969E -123367ADE2349AC6499EFEE389846A29070FC13B766D2BA189D79EB0DD47F1AA -8342C06B95525AED1C05CD127EEF29ED5855D23303B8628BCA4912A22B8BDB4E -B9FF4C480EF777D25F7C8F76D5EDE499AD6761287BF24681372B7A5D72B2FE6F -890FBBEC74838B2254060643C6D2213D3F30FA7EB3D46020CAA17963393E34A4 -0AA271C8855362E7C1FB24F66606212860A54AAC16A84AE63D1B83DFD83E3A1F -8B141360CAADE24D764486704B7915D6586429BFAE1B7DA94E62676FC29DA0FE -0EE6FA9D8D14492B71DA405AE103D63A3B0C62531334AACF080723A206445037 -1977273C647D00999AA1F5A00BFA6C4616A8E80043732D423415A4E27554FB78 -E078697DCF9959987B9D760845EB89835AC14162DBE219FD5C192FF122B4D9D6 -7BC2A394AEBC0323611B3324BEDB67EA623701B72F0430AA2AB012EB1AADC7FE -C5CD18CA1DB5BC202FEEC0211D5C1C5531F420AFEEB7F8C4BD65500BFBA2843F -00B0FA40BA45F150041AA2B9A207BE6F649FA36FBAA3621FF0E65573FF3AC0B2 -EE87C22B09C46FD03D8CD614A020163416856E1E03437256661807E644E5E215 -ECA74612F029F1C2D7A95EDE47C2D83E75D3626B7CF335AD00DE0DC44B073330 -EEB4817F5C14C23A05D8726D6DAF07E0BC4D8F119F7E47A241932D865B9FA678 -1A062C187A0630733028B24E77B6C39A144D94D1C0D183183DD4A239A0464E66 -B220D23F0CAEB1F3932364425E11F8FA299F38FCD93D531B511805B76A9F7E6B -451567EA2C5C867895C9DC50472262FE04B907B70EF693F14452AF6501EAC25A -C83C15D0A3E2CE0ACAF6F8A5FD61F9B4172A0446AC713E92ED8C4D5868A6CF85 -6841431C2BBAC89596A9895221B59479BA3A0413BEF8392F867DC74410471263 -665E0004DA97297CA641457847CEEF34270ECE4691D81AD75FE9CFC1BF6AD5DC -4934086674F86983E4C098713D110269F8F265CCEB6DAC541F91929B997B69E7 -A319E7F6654ABD21EBF40E29909B0C55F107DB1CBEEDCE788DED2E5F0451EA23 -25385C3392E5E9D829A09F5811F867A2DB011D80BCC57E422D75073AE587F28A -49AD5455E3A9A521AD3F4D44FE3451A2D74343EAD8882238D7D6F3D9CC8139A5 -A4AF7B686E9BC6162429C38149054A5BCF878E8216CF7689FAB7EF22196CA7C3 -A58DC66CF63414BE360C3519C4A0DE51BF2627CE1D0500422B73EA870FA49455 -3D565B21E48028785038677C50FF6264FE3C969C71793143DD8B66B94B54F2A8 -58535E5510117AF66616D8E6EE3E9055270BAE607BCEF7C90943AD24A3C7ABB3 -B3D53FDCB0AD8744B83D8635467448EE1CFB06CBC04ECD92ADF821BD0B51F531 -BF65508E41F4E916964A0AAF5170CDFF036ACFB9A6618E2C4730359121CEE4CE -599EA8623DA0BCC0BF26B506C4714AE7E6534E7515662380636249FC50352B40 -F71AA076173DA5DE47D7756D91BE8F120538E0D0216C1C33E2A1BAF7B22FE3E9 -45D68D9A11B3E7068146B5DE27BF87A77963413B6C7A82B6A0D11FFF55642394 -A29255F926FC7FFA1508B10D0F26B7865CC0EEB0D9FEAC8E8564AC9AB06F3953 -4ECDB9E742241E26056F329F31E02E6C23A23D0E0858544F6DACF6E66EDB3962 -EB7DECDA9AA2626CEFC4337AB3A481B5C5A03C4BEA4A18B593C643BC5D0E1EBC -DC3352C3C9B495A94BEBF4404FADDCCC4AE0CF20F80EF3F4E203C68416D5B902 -8DB555FF32D937A21376DAF4FC2F77064656A041028602405941D38D64382977 -E5F6C1E59084026B24AF5D2F04C34855EE2C90A19687CDEBC4CE686C5B12087F -4C5871282ED87DDCB887C12FC53CDA640D7CE0E38CF2CA405102280886F50D7D -7861A16B0EF2FFC87EBED9AE375876FF164A7365A9C982BE9229F939C9932841 -7174A853428E225E6C5CCF09B25EFDD76E0A604B1E07D2E83B2628B83B0217CF -02E23DF1DC505F269A8EF8D2C8BBF02BC435BB8A29A4EDFCC709FC9C0772D3F1 -9C5299A05641D0FE33BADAEA78E618BEFFA43429F36A14797C59A7D89D8999A2 -5531F98706C7ACFAE0D715CABDCB9B2AAEDB14FB7FFE08F919D2C95C58CF35DF -BC6A03EE984E011B2DEAC3AE3D57DABEFE8B56CC314928786268E469B206F4E7 -52282D27E6CF943428131C97BA1FC94A6A42C9656C367BEDFC357C65DAD3BA5C -49DFA0308EE4E904977BF63E4DD87272405D755C068CCFA503DAFEF654EA9D00 -87FC5C35F29F06CAE41CCC78361FC103B36EFC21DB4A81F8EF8AA40DF2C6D56F -4D371861A50A6287668C6B498ED684B19234D0C2083FB1BBAC0956874F5C832D -E969C997975DFA822D3CC29C2FCB64CD7D0AED6AD6A0CA3D525C0FA3E8823A10 -B99F1AF34A53AAFC4554257C1A1FA00535CCAFDB9329603806321963827C1EA8 -84DDB93152FF10057756DE6AAC76FB1506057606AC94EC14144CEEA64740BFB1 -8284A43B3DB14D8B76CF901200F1B0F3DE0077EA821AD21BC5DBEF05916F8B5F -BE86BB325A384B5C1E07392D0D3DBCA4D74172FFEABD12136C1B23CEF7FD06A4 -3847062094EF5ED53322E689EF62595AC22C0B4C976ABEB821AB01D44231DE6E -E8BB1A8469BEC0405D316BF84B6B65C338E67E3CF5C3F85770F84EB92D820C2C -442D0A6EEE44C4FC804EA49E2EC49739A107D03756619AD5B9B0159328A7448F -C228D5F494CF3729592C839FD22E329805B3234162E3041C63B15B4AC9122BB7 -EF697C8281CADC824009BDA150534073B704837D11997BB54482D86627F0481D -F9D697AE86B323D4F38C7A75922DC2DCD757E3D6F6BE6FC469D6CAA0DFDCB9BF -6EC8543579293A7C61638CCEA3DC15289561601C1C094E0F32B7D1C7517C6F8F -9CF09BDA84ACBD8E8FE23DF80C38835647230C8DD9D2170C8CC041FD972B3430 -EBEE51AC8C4979AE9E57F3A700F4BA293CCF5D09CD5A4131C3F0DD8A4CDF4CFF -665004FA55C9DEA74E87F972F60B6ABBF945FEDD5A92E74367BD0B138CF5A480 -E333A1084D91C8BFDDEF637D9AFBF444709EA41AE07701A57847CCC4F5876797 -F6E4175D363C29A4FEC05BF90B87F830A8479BCA8F698998078838F08276BFF6 -75B7A70E651F3163E83A9C27D18957A1CA714CFF0AF2B7578D247AF4D003D6BA -2E9D7D08C92EA2B45A85A77263ED2B2CD58EE3ECAC00F60DD867DB540FB0ABE6 -2C63D9AF6BE106D9946D7060AF818C568AB329857AD47724AAEE1EC404948905 -E23DCBE9401CFD7745FF57DEE3D2A1766EED47577D85939C38E56E5DFEDF911A -B94BADEE5AF628C42B8D71D591D503DEE593BA2008207A9ADCBFF86025C8B8A8 -2885C0B7025A51D978BBC22B7FBAA97EB1F201018C74B38D8A1BBE649F15B54D -1834FEFF96B6398840455AF20A523A8ACD54750EA1DEDD4A5995C2F031E82330 -2DF57363BD4D13B61E6AE7190D7BC6FABBCAAC50770E6A594928017A3A2D437C -C6C590506A9354AFAE60B89464379405DDBF3EC73780E70DF671539786B60CC6 -9D0F02E99EE891F7A160D8F90C4881362AC379D5722963F6C94370A2B3F7391B -49EFEF52A21A9C9CD1E887716834DCA776589C2046462FDC16F72CD0A3D0E5AD -D749A13252ACFDE5DEF2C8ACB12E73DF057AB2D2AF3AE6570543D3DC5942AA2F -1C6584CD22D5F0D5FA10BA3BE310464BAEBDC150A61C910BF9CE68DECD7A5D7D -87BDB3025454749112898DCF5877F1DAE5497E5CA1C1625886EE9F0DEA404B44 -2D0D283E02D271F3E893B171948E4168F056109C286B24961CD24FF5D989BF65 -4B3971FB2E8E15BA4F1DB38E08B19641CDBADE4AE4AEE2B5BDB2D1C0F3B0A021 -437727C3552F4C808CE298578A65B4A5CF5A9098F7F4C9C2FA3D1AC0920F2404 -E231EB2FA07F48046E2B3C9963444FE1649E293C289DB715F79A1C84ECC367EC -36D61AC9FD5E19011B61FF2780F7ADC8AF4309C3FE8498B1E06F6BBD6EECD4F0 -F9ADA8CC95ECBCFCBD0CD6EC52D30472FEB21BD3BDCA896ADB555AC36BF7708F -69870CFAFE7F0E303CF01AFCCD9B5471E20EDF0C892F879821BD432EE1F48933 -57A8C5783D273B6F40082DE30A7E8BA2752B3AD516A840931038DBD4A1BCE6C7 -C927F62D8E939BA406B81ADC1CF2EC6ADE4F56EFF48ACE5CE528A4046965C610 -7E15DE7D645201112A1C747028EF9547609C29FFF1F03772FF76EBE7A9699FE0 -CF629BACCBE365FBF06C30A67AFD7747BD5EA5E6A6E67E57F69FE61479466155 -E63CD0809E6A3A6B3A5CDFD164328074F88307F31E3ED1FBE44D480A9CC316AF -E9C98C1DE6D05028E3EE0D4D012067279E8266758698103473218B1E4811447F -621B4F5A4B5F8D21314ABEACB84BD0668DDCFE9B30CDE6F87BAC289DED99E3C6 -551B5464F324A90500D5A38B049A4EEC8B911ADA812CD8B73EE522B2E192A948 -A6C48150F34D2324E4DAEEDCB63FEE1A4BDCEB4F0EED65C9B5F24D4569120659 -B0A2FE9EEE02030225CA014E7218E545A574A0C4A6BD88EE4EA5B8A537753F73 -6EF2337E222B09BA8E8675D9248FA37501D8EA4D8640D19FA7B06DC6967B7F08 -FD1081819EB80BB6149525723FCB1CD8C2EBA8266102F2559F1D1D0C8EF27DD3 -CE78FC8BCFDF1D112B58F9BB98AD3DB9A0C8B927AC376C3219DDD25F1DB2E7B2 -E9AAF5BE78D7641697F2F15225B570816F2D17E84DAD68E7CAAFF88800781233 -EE6B85CA5EA923D095A7CCC48F9B8B07E32F791B7F8637A49F8FA55054903D43 -37B553E6924C5C018476B5F9BB97B5C14911BB19543D7E320C3062430047236E -C386CA9C72E456E62FCBF89A5A162461A7493C7067F0A535F2F71BB8B4884D71 -90F985FEF3F5334A761C7AC6274C434DD9B9414444918F9DE49C48A3FDC5F6D7 -C1A0E36C70EB89BA0E9FFDD03CEA0688E49BC1D1BCE226D3DF2B7090199C0727 -672B3661695EA616479D839CCFDB09C0DB5AEFBC3E55844957C0DC3999E5D0E2 -F461874F4EC85B1AA22C804269A16315A5CBCF8587EDC34FB6CA5F69E2584FA1 -E5FDD70B444AEB6DE88E38440D38B764D136B0B6FD943938768F1A6A96F196D1 -3A7563B53524E37434B4A39AB79F8732A3DBDACD40DB37D569D465231BE7CE1F -5287B2B29FDEDD60B0935028157E83FC4F1A2D95955C6AAAFEAC97799A944D36 -79330E0CFE4CC50679366071A4FB51733E8E9C8690ABE3EBF74B37F2305CFF9F -C0DA0CCE5F441E0BA1EECC40B8985D812CD66845D49BEC41F488838DC241D038 -1BCB8E04501D4F6BA3B68A50735DE0FEE824B277A70E64580E5147383963E339 -9EF6794890C714F4C1C5726E4DA9076DBD04EC8DC67B418D8DDBE77BDF970BD4 -73C5B888FA4FA8E49821A4C5DE4645B35CC128EC68E05B4389935D28572A7115 -93BC588FD6C2343E6CC1ACF309DE6E3E9B317DFE8C6E7DF7626634D6F4D86FD4 -A7EF24C9EC78B92EE2C658F776D17EC002FCD93CF86BE5ACAB8109DDF04A5E55 -E1132EA4D7B1F0BBDE3EF3D8BCCA5F6A2C75D173C1973FF31C58DC9FDF7692BA -8EB2AFDB5870708F69BF738BBBCEF4564D68785ED0FBC5E2618710B8B54DDCBD -87F41469EBB10A4C958621AFE7D538441B916D2027CDB78CA1D2A48456980FCA -6A13540CF019918A657D985D061E38C9329BF9EFD2D8E46F6EEC1EEC22BFE9E1 -1BBC26AB53DF3F960D44CC4E34F94C9FB5DB77529F7145B317A67396DD8BAC4B -AC27C112FB80C7FC5FEC5635FB2F1285462C512BA93611A606BFFA756CC63844 -B150E927495BBBBB6D0198CFB15895ED3D3C7072A1BE173674281F30714F7537 -5E0C58B51222FA703FB6BB359BACCD3DDE941E87EEE6C843CA110DB6C9D8CD69 -7A285CDC0624C62F95FF80B94AF6003D0230763483101C3B5696C610E8D7BE7D -744B7AD5646E3E03296978B4B26FCBAF9FEE4BA8D2BBCD7921A90F51515206F6 -5C5734A3E7B79EB6BE52E5BC7DAA9E25E8212F3FEBD8BB0152DD3E10A354E0D0 -D39A32FF16BB33E7E237A189E22D3EF237A8ECF4A29F2B79732227C7981D5397 -119C02FF86699727DF000CD2455DFF82B9612535ED20121BD2D59E9DA7A730A0 -1F380A54735140ADE866214B1BCF81251429364A3CFFFD0210F43DE4C0F3A18E -16A4AEFD9B2C8BCB63903895D7E089511F757377C3A0D43E6632C02A7CD173FF -6E4814D47E921A614C15E1B820E55CD5A247FA13FAF772FE3F8626601D194BE6 -D0B3E54085BBFC07EB177B8C0DE6748DDA218D263627AE581F418D3AF9D4DA63 -F47B7F3CCC97273519B663B0732EA645792523B25C51AC82100B3967C21A50C0 -5E03D101E3E2809C60B3C4E39A4F2312CCDEB4947547AAEFCC36C11C0704FDC9 -FCD24AEF0E222F74797AB55AED4E44231DF417CAA77E407670C1CAA980D20A1B -9F11A67F0E7D91972E983B7C737F9B88C6172A978AE4724317167E60A440F18A -D4A6E9267E91F0934DB4D3C4A39D39F081FCCFD81507CFFCBDB05325C9244E93 -9FBFD33484FE4EC6C1785BCBE4B86E54E211CFEEA8B47DAF823AB2B594457AB6 -DE5A4F54B9880F2337AA6D573C0BBEE9297F59152879D819D174B053FC53DDAA -481EEF7B2A2266577852A135DF521CAAFCEB20353BB261C020F0473E17C6228A -AB23DB46B8C4B4E34AF964AD908DD9C2BA4D9A1AD550CFA68D90C3F905FC624E -54686EA5BCF51A9851467531F62D383080D1328E7906B3CDC3D07437F7551FCA -EC539F252F48D47992415E7AA9DB09151A07019207F6477C036DF8C3938B9223 -8F8CDBFDD54664F2A0856C4E43BC30311B503FE669C7AA9DF8626102E519AA79 -77CBB1B04B3F0D4868E098820E2F62E5294C8F63589428E5587C972B3762A525 -31A4B8D5197C9D7E7B5F053408FCEFC87EE8CADA63DC8E81A8608BF7705F104E -BF8D270C9301730040345F24D5A501983AF533CCE8EFCD0853C956E4E63DC0F1 -216188DA8373ADFD01E1F13E2A8295C6EBCA5EBA167634FA19EF1842322285B6 -4F4E574252E9E77DC61D9DE2110DDFC71FA79F46A5F5C6E2D2E33FFFDBD2BB61 -8B68780EB8C54BEA61AAF43911840E4446AE19ED0395665785BDC1C3C912CF4D -CEA2CED3C5CD3B36C2B9E80BD3592B39EEB682CB932D63EA456BBF7B0A616DB5 -7BB7B605C06D7C4FE7DA3C9102148C632BC8E40F2CF013AC8C2C029126A33489 -4350F09393EF045BDE5E949C690CB907F4723669C8C0EA953BC8B4CB89585B90 -86EE01D31584FA1D60384CF8ECB63133BE37B687F0F660121FD1838903A82DF1 -31BA75E32B5C66BBDA89E155D9AABCB3102894D791BD7528276A58007CFD97AB -5B4F556356F0A07E2F9D1510DFDB87ED66BAB5BD43577D3F47602A297A391904 -2B441E55C73DCC58E6AA8BC145959D5BEC778AD8504CA516A1E086E8AB8E45A4 -504814FFE344D71DA5F8AEE2FD228650F7744D3D80A8D051DB487508187CA5BD -ACFD14F483A47F490BDD6E5B4B1D4816CF97938906C8B95ABF37D9F7249403F3 -785EB51904ABBE3F8328666B07E546FA39FD0E08A7C81CE60F681172B8F1AA7F -C9AD47C19042C381D6C65F56ED7C796876763527F00674CB212FAE6CA4227AA7 -91083D6BA175EBCCEFF501C5A313E4DF0F24A3FF04FEDA817D0A43308339893D -D8880614194F99905039F1E3A3037FB1A793831F6A59DD1BD93717F9BE9C7B4F -2190AD59CEFEF5F725C13F7423D995905B2BCFD7D5E5751CC337736EAA938D96 -C3B647C884D77DD231FB4F0F12F34C4F19EC624CCE23E79D8819E5973B09FACA -EA6C4F3E41598F1D85E9B7B2032DCB586E40FF894B7C5F824FC29AA9060A2C38 -1561F32A55D27334FCE5DADF069B70D2D273A90684A476267BE03B45F7E4CC6E -D218568CC95AA61EDE29EF2782D595D36E6C547A3228BC1896C2895ADCEA6D9F -C7F867989E19C294B11FC361E4848C517D71A24192600DBAAA35D0FC131F5987 -D0E601E7770A3A21FCA2BA791239D2E828831A5629B5EA5FF5A0AFD1206566C7 -EE078EA1D894567AD302C4D6CE9ABBA5622E62A7C098174D3F4C4DCDAD3C5B1B -8334DA7DE7ED6F290A1E724E503EBCCBAD32A4917BD0A52E56B17A51F01EA478 -C3AF49E79A6C8322832FD9264C626749838C9468D6813854E6EF5D128A73CBB2 -7C6C3C4D99BC785E5C05EE5F71F48524560E0B9BE7380B07BDCAD174AF60F334 -7E8916D1A27C07B170E56B36AC746A1907201A02FD2D542CB05B10FF6AA0398C -65DF4B23D4AD18AFBFFB99BD6C4B68BDA3C96BA7ED6B2E43F4CBC09EE1C83BDE -1E27A33715741D367BDF8DE00631F60437EDCBE59821D5EB05E1C9A431623409 -DBADF50812013FEBD896DCA3CF2D40F2B54E4CA9BED3F7727909F3566DF7C59A -1944CF20D0A1F3A0F33ADB1EE0E5CBDF689D810614164F6C99107A45680E9453 -46889A48B24F8FC1969AFA923358DAD571B4C8C382451EAADCC1961DB9EF9684 -2879F2A2941D91A650265F0D690FC7CB7E0A03E8E7B29608C5CCDB6EFB503C19 -5FE8CC0600121C62653FF110281CEF44E9CC51BE73087C491FDF1EF9E65D0CD7 -B47B5030002CBA1E661BBCE4F5654AD7611D87F2A6ED1EFEE6EEC8BA9D1FDB24 -7AC23047E333957BA0884433D5477986F3D6E70944276B529D986C9DB106A855 -281855468228D2201399155385316D73D6CB09A4213B25A7E94808B132FCC87C -5A5E55AA0675ECBBEC02B0D158D466939049D1CFA45999AC664CAECBB02CA229 -26B1D3F3CDD7319A344A6E565B0740A39DE1B12879280422ACC3D46FDF10CE75 -B9EC7A53D08D327943362D3A379389DC56BB1BEC93378F5E1C066F20CCD8A805 -B6EF1094A2EAA18550C7674CFF4161FB650CFA20164840004EAD0BC02F90A251 -3E575F192F04AF0DAE4BB67B920AAB3FA4BD7D29C13F7F3D74A08138361DD5FC -723627C327A44E146C26B1A3C765E068E3CCA87E4BC43DB99EA0CFD6F8AAE460 -86AD3DCE5580428B79319FD4DD1B719D324F8A22ED3FA5DE8FC644D2448A02E5 -F41B33E40DCF4B5273715C6D826767638F8FA1C2E6A077CC3D7CB1F1B561CD3C -617B414FDDDB53131C3C0729926C60312A0E77FFC6E7122A9B8C712AE745A6B1 -98B0287848536500E68229B04B9B36998D26C3172D1BB5F969F9C2159FF9228C -09301197699BCF1E8FC572115E03A6549815A3CA1843AD48F76423A7BE0B5958 -403365584BE04F2533C19C59461D098618889ACCB72D438B6A67C3D537D5DDF4 -739C5E28878865E5B966AF13C93C61141A2096691F720A22845B32E4BB9CDABE -0B54E93737B5C8EB3A34B33D5004E89529FED52BB20993DCCFFA7BA3E7818887 -7AE16B8E2944BE5A414F4902544AC2980B6941020DB37ACD3206D4097CE9D773 -8ABBE3CB093103AB22BB1AC838E0675E58ADC02961D8C8199C40DF9607BA5724 -C9426B847CF54BB03E584DC1205A5E9A6DC96B6605DFD38853EBFD4D83D58B8F -CC1B8920B693A8BF2ACAEEA92210A76E499F71AEB042EAEF7BEB1CDA04176973 -0FED3683CA4277DF1A51533466A84356DE67D3F5FBE9946EEB815E049C6B7696 -327BA770004C961E54C7188717CE9EB1365ACD0989D81EC654E103D7E00ED214 -3AA75C0B1A464CAE491BF8A58325BCBD64A053D443A549BAC5A6A3B14469CD8C -E2E61FBDBE72A563ECEB2F8BDF9FA287D81E0B290F32C71790E7C5A633C00140 -FB5F84F1C479BF050DAECD93C2E55EE8F198217C0ACBAADAAEABE085F8F48096 -81FE220DE481A0B6658D2C442CF70CACED03DF28606572E9F5423378794F2AFD -59C5AFA3E4812C2A68AC7FD4E108B5E49BFDA7F5DF908AC2002A44BB256CA0CC -84083E5BEA66CA1BD481915E44FE76E7B7C9222C8AE6AB316BDFE13F78CC8EB4 -E818EE7E151D85B82F66E0AA840A81C2DE92F41A6BD6E891911F0B721A7F8EEA -403FA247629E32CBA3AF5E9CCC65BDBC858CBE0A73911683A548FF0CC5C59BE2 -AE1C849AC3655592175608912E36C76B9A360BCB16FDFF13EE52009439360931 -D3FCA88A291A80D0191C37AA41529CDB8671BB2B56574AA9891318D938366638 -284C746921B4B4AA52CF54DAF10C4CD7304CB0F3A86CE941D58434BA6928EE80 -627DCB0083E3737E7C5173A1CB6AE76B753E0D52FB7D03695184D25325AB4AE0 -4754BA3EE0435F5A73D1C8E5A0C287020E341FA8AB10C5A489B7C55EF12172AE -DC47F44DCEF199EB8A21DBA841C06B0C15B0BFF9AFF153FA3CF7EA1D6D5E0021 -FA6D554EDB3E152910BC06835D61971ED81EC6FFCD9BF225B549CF327BF81877 -24E214BB1EC735FB6F90A2088D07329D0EE8C8718367F5A2CB81CDA6668C1570 -2945179792B05042A98A863F2274A517EFE62E1A4D8396D974C55542F7FBA5CF -E06E127DDD2546D218DCC1E4719253500DB6A0467B073550DC6DAF8510AA0E91 -5C6C5A79EA47C7BFA147815E63DA3AAB3EF365343FE1206E65FED7C0C32F408B -82F3498CD916141B896996D923DE05A8EB5F67084287B0870ED87EE892CBC157 -D10E59E51CC68C39B7A204AF3D392E9731F0DB1A12B92A393E438A88639B076F -9A5FA0893BF15F608E675472DABDADFB440F9D9441F2C7480DDAEAC135297E34 -75D680E79D670DD39F4E52F7709899C45179EFFA4731A7A0B93AA92CDF -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTI10 -%!PS-AdobeFont-1.1: CMTI10 1.00B -%%CreationDate: 1992 Feb 19 19:56:16 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00B) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTI10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /CMTI10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 34 /quotedblright put -dup 39 /quoteright put -dup 45 /hyphen put -dup 46 /period put -dup 58 /colon put -dup 65 /A put -dup 67 /C put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 87 /W put -dup 92 /quotedblleft put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 120 /x put -dup 121 /y put -dup 122 /z put -readonly def -/FontBBox{-163 -250 1146 969}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 -9E3948FFB0B4E70F212EC976D65099D84E0D37A7A771C3101D6AD26A0513378F -21EC3643079EECE0C9AB54B4772E5DCA82D0D4ACC7F42FB493AA04A3BF4A1BD6 -06ECE186315DBE9CFDCB1A0303E8D3E83027CD3AFA8F0BD466A8E8CA0E7164CF -55B332FAD43482748DD4A1CB3F40CB1F5E67192B8216A0D8FE30F9F05BF016F5 -B5CC130A4B0796EE065495422FBA55BEE9BFD99D04464D987AC4D237C208FA86 -0B112E55CE7B3782A34BC22E3DE31755D9AFF19E490C8E43B85E17ECE87FA8B9 -1485831624D24F37C39BF9972D74E6EC4784727AC00B9C4A3AD3DA1C22BD6961 -7E0ADAF55422F22ACA5E4DCD4DF9FCD187A566B7FB661D0530454D0DD6C6C50A -7A3875C6CBF8EC7769F32A1F3F7FC1C072BADEC97794D4E90E0035282A170402 -356E5A9CD9ABD80AC4342A5283E458A7269252F4541CBB6452B39ED54D336D0B -19928E9CD1AB26AD83EB209E2EC75011A2643813053B5DBB0246097C4821B5F2 -C92554E9140BE35B2DBFCD98809A8EC9FC910FDE9E0D86457C70ACB056EBF90F -244DC0A5BBD455E15D6E3180311D52CF50B0BF7D0A7F64F3A1821E0AEDBC2E7B -AEB549FE1D51088C153799C6E089B5D5D65E1C4E2D2B430CDF1FFA23CCB25D95 -5C4DD885310A706B320AB25C8D742C6F29953254FA54DAAEE60ED477877D19BC -D28E9AB576B0EA088171FD000B60D73B3C57F754BC07EBC9BF751B7D2B32459D -993861B7C4B0D98C422A11BECEF76F4EFC0ECAEE89723E6CED53E3678D733363 -2DF068AEF0FE7DFB57393BDAA439A6A4C396F86032A98009EAE1247B7DE83B3B -E46DF2898598FF5E6CA6953127432A967E4FD41CDD60D6E413059A58FA556EF3 -309178B57C16A763CFC9BEEC276944BDEA255789EF4E1ECDE1EA43EEDB955513 -F42EDDCF39AE522A1DC2DC523F046EEC4CCAE25792B702C288732F5B13B5CCE7 -E8B6A1A1DB86B1EA38883E481BEAB54023EDD9BB94E7780DEEA577ADAA169E66 -AB7D8607B409619E79F242CF52E618AC0DAE43317C507CDB27EA8A1472D4E8D9 -17E62C98DFB049C78AD15560CE44A39581BD6B555165091C5D41071212A9D2E3 -05965AA02B8A67AEB04D915DADC1B84A531A1D672AAA06E9F720BA88419A3183 -63D1F9A3BEF8CB2E23CD1F9C003BD7849F093D3B4C83C153A5A790C1F9E37948 -5799C02F004C61A6FFDEAA1F9AE884DDD40DEB1539CFE3C3BE03C7C33CB54D56 -2C2A0F467049797B56D407AA43EE6B8C3F978A7D945A80BF711C12D6BFFA3DED -35FA8B22E68BBE4FEC59E4C56D3C57E14995A8ADFA51CC6C3A84D3D775CAFA87 -A1A0F45C0283139FB485B8FB0BEF5232494C0CB564F966DFE0D0566031392619 -3FE8F0BB6747BDA591DFB26132947872D3B209FFD838A17EB1D5047FF880E7CA -28BA81889AB0DEC353C3435B95D95C2F085D4137A62F570CDEB16C44DBB361AE -83DE118ADA0DA5161C826F65DC8323D7D8C9CC860FDA7ED795EAA20B1CC97FA8 -AF8EA786924702E9D7923D38C729D4CF51F3FA68583E9CEFE4C7E2C46F7E343A -78D6B6DFF1CE99695B525932A36FCAE65CBF8CA33F19B5FCC65501732575ADB7 -75275A8B076C41B49F6B9DD98CCEE4248EA55F396FF5FD3F2C535A291657FFAF -9F8670C5806792CAB5FA50A235A9D2E5357D8D8A0E05A75A790249CF09AD48B6 -05FA7E9A8751BF2EF4D2AA0222D20E405D2471F19DE6D58FAEF624A437902362 -5D81178CD62290E4B519BB1C5003AD7D7FE7A42A48F04D640C744AD138C159C5 -0F88C3FB95A0E541777EA35C392F09182FD45847263DCE59588AC86D95FBB79D -BCDABA5CE37C217572D6E450C20DC0E84E25EDE104ED8B8E840530134214F0BF -BBB2EFE76225C286D3FF468E55477CB868CA563C7D28C94733A75DB8947B510A -3F4699FCE22CBFF8C01FC6286CB0F64415BD65CCE6A80B84CA751BCEBF315BCB -A3675338D53AAC627C2DAB1F230D056CCF017CFC0DD87A3A47CFC0C126D408B7 -4DD99F2DF57DB3330681F0F9E215366B38CF48284DECEA833DAAC926EBE5A535 -86F0EFA4474CB1AC1DEE03AEA22D5AE1484355BCD2E6B5A715F1BE34FFDC7E25 -5011233239AEE2C49A61AEE7B63068F3FCCE4D8C498E120BA9B13DF0A067285E -49887B2653BE88CF91C6239FEC6192E9DB3A0EF33095056CB4D28588028D61EF -16D171D79CC6A01C4C8983D992C72179D08666AA484F8842335B3F348373B5D3 -4284A7168B38B18DBED86BB8E87569A61337D79303F889DE30E1E3EB8A9F59E7 -A5FBE8AD4FA13CAE431276AA758B55DAFB8087E3B4B5BDA6F4E491E32010F7DA -1622BAA5796897149FD7A0078B9736039D38E61B3F45DFB9A59791207157B4E1 -A9B7A6ED061DD169A3DBE6AEBB360102A01A4A9A939D5B1B4D88354435384C01 -D90646D9FA33F52A6F51AE7BC3C20FD35400B7EB9E0DEF902DCD5C683A812E0C -317BCE806452BAF0B635924B29155908F9E398DC842325E7A805CFBBECC780E8 -858C4E651DB3F21D7C2A7B0A136320959B4CE6648C443AD58D8940E892160AE4 -EAC7A410773E0447C1AD979935B5FCBD2AD2A4700E60F5C7B2DC3B6F952307A2 -284241E23617650AC6F7D4699032B7AE2A33429A74EEB3147CA630BBCF023F57 -0760E9EAE801D873707FABFB28F845993C74AFC7DDDA61616273420E40D441F0 -87E195147C084FD24F5ABC665BC8404927DE8C7FC1AD3905336D6B5C270AF89B -E30DC11A608A6CCE6BCBE3965B99462E74F4104B025134F94F9CAF6355CF48EE -36A0E6E93B01C8A47B6E25801AC20A70055EA99BE72E82781EE7762CECAB33F4 -5D2D49CF6A3762310C0926D9EB6D02EFCAE6AE0F19C90F9EADEE2147665594A1 -61D1F4BFB9F9F026638A63392DF68995369084E8878D0DDECFB9014051A63949 -10A7E2EF46B2E13A6156C7EBC5953AF095AC1DD4D0046E4C5BD5AD4AB5551DFD -FC79F4B1CB623F49131D78C0EBFABA072734D63AD9060418DA63E769B555D7C5 -503DE5766C2E8E58F18972DA3A971E059D617B6C87BE20C0D7F35C6DB48A87B9 -479E2DC34D28F52E7581E1500ACE5D297FAD917497329D2C861DE6CCDE674AC6 -709F1560B9A3815A137C94B3656A9530C94A8E93F785D1F3D3C6D6B572249C54 -8096B03616551E37F33EEEBB6E8F51487798BB139BF82DFD0B920F30FF3CEA03 -9337A75AE908C570BC7DD9BA08C06A580DC513383EE610E916988B2CE823374F -24394F119F5CE5B07E764FCBF963378288A5250EDDC7D91DF02F7D5B46F45217 -F7B52D7F80F82E0C909BDA40B366D02E85D35F2C3165B5D13BFDA6C394093EB9 -22AC1D7417C2D8AF50B8EF4C4331FC7C1966BE7F1F9F50847A52CCA3607BE7BF -6508E15283A54B1532BFC2F35597A006CE5427FF7C114B80BD33B58FE42C811D -6706A12A615F4B7BC1CB26E1D686ECB4FF2A962F76D5E946EA5C934650BF0816 -988D09E7B49917BC4B33F68982A6D6A0C91A86CF1ADF26EC250FA56FB73813B1 -79475C929EE854F49CB11190E94A9173E7C78A65ECAD54643127F8D64F84FAEA -A6E31E14C146A3A3C6DC59D0C29C4C7916E6D2B60B17650AA80EEE170ACE051B -7AD90FED27278C197B82954E63C566AB102CBDF0FA581117782F3A6ADF241ADE -7826CFEEF17961FF5C4EE4BD84C45047A300648F4EC19FDA8212292DBC54B027 -901EDC9AAB0D6F5274A1A20CAF591A4B2598409676C9DD3522515458F226C946 -7C05F4D88915BD2C149A025027281C92C6EBA700B57EAE12702BFA3D03F5D079 -A58999697C16E18F99865FF93ABDA0EA4D01AD8C14BFE3944704AB250D9E7D58 -B4E2811DA6C1C1AD351EA15A23AC406F2395F1FD1301F23AEA6CE23A8EC34BB6 -032AB1C4B6F3E748FE852BE0C044E07852579E6D0A84B72CDD725ADA718AC14C -DE1FF077D87D37D7282166BE35BE1D6AC4D0C40A0C11852F3F9001BC78E2BC78 -35D0B4CBE6965C515002320BDA2721D4968C1835406680A72A0B02B6D83329BD -DB81D24FFA508AA58C8A509C18D9854CB4645A7C05460297B32A2FF9AD1D2F57 -4828A85DDD879B7596564425611A023FEBA4859F1080B4F4AACF4565A152697A -FFE891139F18DB6691D2C9CC4B10DF957FCCED4CDE00DB326382676C38F25E8E -759955441A70DE8F722915822357183302742447D892C56CDD3E74D007BCB5B2 -27B25D0507053F4EDB0BC66289C83A47B4633FCAB7E626AD5AAD6D24BB252F52 -176F6F32826442D59D2195B2A7F5DD540599229A6CC6371D4D94422E31A64047 -029DA906D2BDB4B267851488C22347845B0BB402C8A97E7E5E133D8917236A1C -30806D41551582E7C728AC0FB480C255EC810266DE7B46E52A6423579CBFC06E -C8E2FF9FF00EF9FCC51FBB22DE4428E280CE1FD5241CCBF81070486A0DB9536F -B6BF451F7C706EE44D37A0D78793D24CE9049BF285C1DC9AEB61BEED88C4CDF5 -D3BFFED602B26D4B3788E171579289859313C918CBF70EF8F655CD4FB73C514A -A34BCFB555B6BD835FA0B80997608E9F938257050F1673AE03E6B4C6F96045AA -A8FE116B8A9C0295D34802D22528B80EDCA6AC2C5CFCD57E12F12ECA8C0BDD0E -EF7F3B6F4EC14C3A9C68ADB70B6454CDDDCD3181DDA00BB3A9DDE3C64F162D0A -9250AAB836AF3F3C71589E1DE6B542E9D82B1266E23046AF5A57A7FD5A3EBA92 -B137FA2161E97A54B5C472BD23CF56F3936DAF5C468AB88A6B587226829516C7 -71BCD7CF1D3DD40CEC1A6F7895DC95C9C9BF1A571878036428A9A42E9B363EE8 -64FE7D1473CF558A246F0921C3257F0EDC4EC2C1FE4E342011AA9CFA4472204C -CA1DF74F5BF01A3D0F518FBD76194711589E02F3F5290599E0F066F617B8F0DF -6C9196A71F091B8D7A8FA8A72E907EFD9821E1A023FA4583B1BFE762A07CB409 -FE74B4CE4A642AE77B5FFAE5FD7D65A1C03EF6FB31264EE51BCA46A8927907F3 -AD83EC5B5337F738F44E204BB64FE063A8C7738F217BA319F23FDC8A65610014 -D99A05449EC21CECBEB27602F66708B1207810BB167AD4D4FA4AF54767A35B1F -B17454FD0D82F04386A595397E2246ED339259A4B70854BAF3F41500CD1FA69F -799BEB5C6FF670D4E0623B2385D545E2F46436FDFEE4F37DE68308BC86551E26 -0DAA88D7A8E54B4E5FAA94B88E322EC04542C3F8C9AD3DB9954CC32DDA1A7002 -8793B4532A5D6D31DA33470BB6D812891A52EAF966AA1629461C25930BFC4C8B -6B03832F4AEEA5D0B27EDA93F980E91B5493B9618F143A4CBD26B4CD8F0C3D16 -5B2F27AE628D9AAFD99F4A1677557D68AA42A8832A7D44092AF20DC586290685 -48BC89B6DC4734F8E13F714A54742DFDDC2C85EC30E53E39206594DB51BDCD17 -5A68BD85E351CF51E86163748D3AD70555FF1D5F7B0E556E54744181F7C48BA1 -C2C56129EBAADE51F7764AB181B6FBA1828107F61E8047A5CE36B58F5D6C2C17 -61990478D0D44C23B1BE2BE6CCE369DDD14AC25BBAFEB3E33D5D50285E947EED -3A23B5A8698CF9F42F75A514D7B3B0EE048B2F2A4084912CA66A14D1977AC21F -7B2A332F41CB33D48E09F8F0AE912170F6019D655DE6827277CC043E001E37E0 -88C7898F6ED2FDB215E4D4EF79787DB95777151B1951A2CAE8A9528D7E2BD15E -37F3BD6449856E5150075B92F10F9615F66FDDE2111A4B7BB546DAB5536B9437 -2290D2405C5152996CB1D4B217FB16D6628A0FAA3DAE60943C98F4890D18E18D -3E2740F42CE9151E388827AAFDAD7CE9F12C54A932837464336B5575F0E2FA55 -15DE03FD73C73060E4AB72F7BB3B2FC23D1691FD104F0330193915910A3FA534 -B4EBE0B42222AF6F1F8E2657D3CE8AB1E8CEB40686CD6953C233E52C3D1534E9 -A7B5EC22ED0CE565CF1B414FF50B6E3D6CFC342DE97F723B674E63CF67D8AE5D -C786A0F6BDE30587A1CCB7BB049B73559AD44CC0BF2CB3934ADF7401E5A8F327 -9D701A04B88CF62B6B57FEEB8A36ADC12DCF241AA96C019969BD00317C36D0CA -2642B811E7611680AC3B4DC34B1E98426D7F85043A042B74D8711F587EF31CFE -3AC4F7FD9CC6CCCBA3522AE22809395B0B3BB1B4AB9CC1A5D1EB982E9F8C3F97 -2BF975141C39AC80AB0904EAC1BE6A2C7F97A9AF3B32ED276373AE4D9FED44FF -4F1A91ACD26F957F9E50E1D4940263BEA65E273B926AA3E7DF828A43F54D9A49 -7AA151A70ED55B8B5717527339C2A468608C1A5D665D0541F53B5386BF6CDE9C -E07FE982E83975D173824F2CE58A357A1EF179483CACF1C2E95563C2E60345CC -21556A26D49F40B84A4B4F00EBE05FE36CB920F65FDACB38AE6EA7734BF35029 -9865BF659669E1C829199BD232A128E494B1D6FBEE9D92681BD7C0E430C6F958 -2054B0587017126033B6696ACF3ECF85A90B3894AF9FC37D65A6A8853DBBB25B -1E016D3BC01EFC65C13E487DA69A7399F57D02FA6FC3EE6FFA7EEB7186D1AB77 -493EB4A36D0FD86592DCB7F28617E4EAD22AB1601138628F521962C978CE0D8A -384573776F31625C13F19D35CC396DFC57DC36173DEB95F8A86C3870DB90C065 -70481E6DC8F7980CD49C6A2CFDA7EC07CA76FF8DA24E7B8A6364F2B734E1E645 -1829B8652B838E7C55FF037DD51C13B2A6867000D3E8C6652DAA087170804F66 -3F9E437FDEBA6989464E9C03528EFA9D82D5C67B80A06892B23F6DBC7FB79988 -FE00769CB542ECCDC42FA28F34EBDE4C37152A6C6419033854C7351FFD8DFC69 -361909D977C3E8CE7E1AFD26FE2B8A7FE5F43058233310A63B0E11F28C516A4C -7B82A552BB84C0294DE50E6969628C96A9506B1EA590E02D199A6174C0CDDC50 -B7E822C9312F3534030FD1838B843375F0B30DBD4AFBAA0D0E3A49495971AF2C -E98061E422984F585528EDC16DAA7ED05B4353424554AD2D6345D6767AC69675 -2151A3A2B5C28561DBFEE99CE0C957E8BF045D790BA25949E2B9CE6F63BE452D -7786129389D5314E1A0D6EFE59139FA6583DFAD8C130C8BC8C5D4B9D77E778CF -175CFCA392C7D49331486E34C4A934969F61D00E32750170C7B70CF72983E39B -79C07A23D10937CCCEC01186C028E704BBE47ADD015EFEC387B6419F6E1CEAC5 -56E182CC28172FD62A1CD65CF7CB008C637CEE19FD4EFFC27E6BE2ABCC70C5B1 -C98E9E4975B21FFF757DBEF194AA8266B0D62FFADC903D525766B90D94F3ACD3 -A7FC9C32DE3F22F4501B952AFA043A333C7D4F5EEFC8B8733EC891B1A8737D06 -867EB30136155DD70E9843E5E240BE2A27B2A5FE49E681CE09FDF95580D6EAE3 -005674C7DDB1F9CCD71599383B145B25B0E2F8D97A257CEC5CB815B87E866C4E -C5742D0259F6ABE53CEB7F99038C604C3F975E43D8549C79C26BE9D90F3B7E8C -D4BDF13BDA5FC962ABDD444491851D4C4DFAB33BA07ACFE9BD0FFBAAFE053379 -E2524F7C96C62E2F32A9FF6ACCE2377ED03DEA4C75F4872E9BB2971DCE61F2D6 -5E40EB4A94B72A99D95D10B1EA7380DE2D290F06E6A63F50F1C942AB62371FBA -E81128E0B72132BC5967C2AC5863B8E849A57A4A9D21635DA15150B3A5F68E6E -A64170777942B04EB0B06033F5C37CA43F00D2C513D6572370E16B8E381652B1 -D4F4270B1ABA10CD543C1CA4F8B86E4A8A41B75733223D9F7632019B86EF650A -FC8290993AF5B2AB365A600B766738BEBF9E9653FF5FAA418D73D84C60056D98 -06D94BF718A217725D0EB7E2983DF02FE8D17FB2D3F269A0322839D5B0252A07 -EB950B64535EAD9AD6DF3A623855983B92803E98A5B15AD12BC1A74A439B9C1D -9374691E7A77F4967AFA1B84034673A932B0DC5C8401347F5126E2C91F775310 -84CC81A0DCE7F2F5B6C94FB0154BB6FF0B4AF290AC3E47AD945E5D5F2E1E094F -1FA125199DE39E768166F35BEAFD4F013E46E91BD2F3A43B1313AAE36DACF9B7 -3D930CD6196960C6CCF6AC5898F4A74F00C641BB654C72C8F6F4019487892314 -5D7BEA38D16CB807395999F745E89C2C0AF226CB5B4A37A01228457DC91FF7BA -768300416FA88230832FC3E5DF27756173824D8C4B438974947DCDB17FE523A6 -E26822458D3861C4E3D94679FC72A3E54C11E4FCA8FAE335DEA7D9F09F3EB320 -1DC5E1B69CDAEDF6D01999C3B48F27428FE44CD0EBD9BD2F21D7FFB99EECA344 -83DDCA627C2B934935DB8C6EA42C40194F84581FEDD784F1305B49917EE2D745 -CD43006AAB08048202F11D0461B6B6917E54717A8FCC254A7FCB525167519DBC -B3A261DA71CA704743F06FBD3BFCFF50FDD815E1C31D3A07BEA05D8FEAA4371F -968D5593D20D351DEF6829F95A89B836D6F67F43C5A969A5495F8142B3527AA3 -A8B0B484A7082985804922DC8704C9863C30A798854725D31716115801E440FF -37E1C000A901CCA9316C327F4C5CD651E24629A9D6DB57FF174619AB1BFADE6B -03F189C1121F12731A0BFEB2706E2E49802AECEB2C869E8F3916808FEB82893E -D9102140B95BDECE891EBFDC0877CB05D5D693595BE1744486199A80D2F299F0 -1532B5B51D44A81F6630285B775CAEC4219484AB679C387736AB657D2FAB5FF4 -C1F38955043568B0923EED7871A79EC0EBE857CEBFEFCDC56BB88B8DF95A5955 -B1B5C6C3758EBD3961A9AA8EB80F727587D52F520D9C2F3B16D53D04373C40FF -8B43EF30AA6905E7954B30F8CAC576C961A97D017E38333401D46497F464C58A -6F6DAEA14796130F4207C9A2C915FD60987A4FADCF15B1CE028E19D84741A4CF -E92F14975B22E90408636EC2C6BEADBBE2F700D9C52DAB85A8305314D0E9EF86 -7FE155A21200C540749897BBB8446DB0FD9EA6ABCF1EE1384401EDFBC56780F7 -BA296BC9949FD913A6C1465F372FBE8A94ECEEB080DE004F68CA85D8E14E2FA3 -C2C9F25A7AA3107560737D89D424415F4519CD32C08EE537ED3C1D868FD9E959 -B7EFAC23F9A3391952F82B64900A8E823A2C151A507F13B5B8494D969668D5AD -18E616740BF5FB4FCB456948366D740DB5977F1486ECEEC222BA34275678D000 -E72627EDBA485B582B3D0B8D39A84066E9EC9AEA514C99A610647E8EBD15002A -2A06B2B774369115542E5819FF5CDC8EFBB376FB8848BABC2A9FE36FE58664CE -ACC537460646EF5BE3E27AEA3EF1B448F483352A74BB076C6C70F26919DC748A -8F8C8F00D17DA9BA1A2C6B2EF2991820AFE725820547C323DC5D881A09951743 -CF93DBF69B34DB77E5179489647F10AE99BE1A397C3E9F867E32A41D5E648D37 -D2A23BB0BCEE888C27357C184545AEFFEEDFD381F02CDF27365C2F6081A9F130 -6C093331619FCD8DAA5785ED724C65C750F68AA4F0DB9482ED5A9C7AFCF992DC -C7E835150F6FB2FA3B7ECF0EF9E2DC3FC4B662A39BB4E6647C970729D6C4AB8F -CE91E89425D5C3A7CFF43E0DE81B4010EBFD6F4B59E6974D8ED78EFAF93403EF -2546021413AECAEC33F23DD20C120A352490BCB429609877704A5283163164B8 -36B1F3C515F58DB0539340A6063F88E2846698593D5518413D76184212A1DF22 -DD13C9CD8251056A988A0054F340A7A69CA5B946BA01456FD45BED04A44158EB -89AC05C4E21BB4CD9D1721250A8254B62795B4F723DD561ACD73A975B84D387B -FAE002B7854DE9284C72FB4E32BD70F440083A990FCF0B35A7DFC987DF094D8E -31700EACE3BAE2DF2AF61E8675D5A55062426268A169B24CE0975982C76D36A8 -BBE2559A8A48F3B022DA0E3339FEB3357B83EDDEA914391DF8F6E80EAACF0742 -B31348E509D17A4C02582E854D3838AAC88AA0C0906C8505FCEAF8703970A3B4 -38B0579D7AF0E0283FCBEE979A3E08AD484F0C1171E41F58AD8BA063FE85D248 -60EA777285CBAC139159875E82165494DC8A35E3A67A75D8B9C8CCDE9805325E -39EA26FFF3BC9BC99BF2D2D70A5F00F410E50D759E1CA678492DE1072966BDE3 -6469C249BC34CD048FA81F3241D36839491656C95313E1BBA617EDEEC4ED9703 -DA7A345DE172C2760FBF66559ED167BCB696C93FF085D81987602B193E87495D -2A2A19DC6FE716765861A94108BC65FB38DB6EB504E7E351B9347B68886382DC -B872968991EAE65F67B8FC8DFF6E3E97E94AF46EC98C89D877EBE2A9793CA763 -EB155FF47A65BEA3D5D23177D8CDEED3523026E9B5132F6342F1257225F087D3 -BF2C1177C097AD32E23138CDDE0F651AFB6F10FD173A3B73042669C116081E80 -2A4868ECBE26189E358956839C56678FCBAE2D1705A1E5928A5967596A4CB329 -AA02488FB3E2EE9E52C67FE4FC7D40F2030E7072F160176BBBD66DF7B2AFB1D7 -2A5AF0F3564FAF8049C4B7397D1DAD17A1DC4E2099D3D8BA176FC81EF20A0A63 -C3116BFDC1F0700720DC16B6C58259582B39D00B478ECE899951E5B8084E876A -ABB69C19482D66277AF4323FAB7039AA9CD3B17539E75FD7EC8AB8474E9BD4EA -423607C7FAA068A9339ED9ED7B1C67EEE03AF3F3137CFEE8FFE71FFF275D900E -AC82CEFF1A42FF1955309E22E006B69967452AB7F01A2C3ECC090AA180CCAAED -EF42CAD566B25CEF7BB035E4C6F50264BDE376609389EBEB3EAE245555F49F1B -C67BE891C11FE7A4FAB4D9C62974F4E0655A72B36A86AFF1634B6F5E5B569BA2 -3C3C5D9E133A4229C4597D4B767C3F55009E29FEF97A003D249E1DF465C73A41 -6BC404CE79CDE12E861E8455E88A5C8A92E325192599261D99C319B561B54931 -518EC86D45D7BB6F19CC3C66069E597E1CC055C4A3BBDAB813CE6813C6D8BA2B -DE6327582814F278D91B2BA37035F322B921A22EDF9D80DF29C0F6DD0D81C17D -7DA05D5668C25720338B7DD5D71683926279031B8F1C3A6585726F45B173E405 -2ACF6F97355BC9856D0597990EA6A35DB3B1EFB83CF1009882AF73CC04FA44A3 -5F4B1D9C72BE9F2441B09AF179D154D7964DD71B0F9469525D314330DD1C8BDF -0B2312D6ABF64290EC0B24BCD55294BF719A222D945ACEA9E427A42F32F5F5FE -D839F6378F381BC8194497A8A3B4F042EE1B960DAAB4148B5F1DEAD2049D1726 -F28D34283E1F2A2CE61C3DA6E3D1B25F21A2617377C4C5B3B275678A158BBBF2 -430A7079B4FC2873DCA92DD3B3DD4903C71E544302E76AA5B855A51FFC17C7DB -D11D7906E024E2F193A10ECD6E74CEC5B1ED8A6A494F4E79E2269AC55A26EA8F -02A6901D66FCD03C338FC6614B892D011DC089C36236AB07DC5104B8266790AB -D464B1775BDEDFB991A9015DA95A6BCE1B3E61B71BDB2C08D3C58108929F1E6A -5BCFA64BBF4E1EE1DC873492B686DA569873C0EB51DF8CFA743FCBBA2CCDE3D1 -F4DFB080A258BB14081593ADA424B77DFBA348CE11E723F091AC89C0D25F6794 -5D0DD2D1A78CAF3AA1DD692EE3D76C6750B1104A0D6512FF293E23CB895D3285 -F9B4CFAE9F4B44129E45102104786D8EFCE9F00B15AF914D27CA7332886D68E7 -F32963740C6ED8D1934EDA3A3BC3D16FD3121E76040657E4C917AE56512E46B1 -B3E57AD1A83FE1EF1A640E9D1F532A30515CD527153C9A597C5257E6B1DA8018 -63A379B4B36F7C0352E184A30A581CDBEDF325D9D92CF9FE2EAF2B4056ADCC46 -817C75FAF27861C519C2EECA730EB6215EEAEAFF9E13E9636E356B24C1FF32E2 -BDDDD4CAD0D46769E3A4CBF16C9AF3D2C739723CAB2427464A9B5FFCF7BC5318 -8365C834564EA5B11F1A22CA59575D07C25C30567983467499F27352D34457F0 -DCD55D488CC9E5AB42DB1AF140B73EA7FE27CD44D8E610D9012FB57EA1438F85 -5DA3A2ED40810B23A6A8F814CEEB2320CE5E1A9A1BB117EC249E409A06BE8BC5 -A37EA89E74B99FBD237917F62EF1CDFFC3893CB8D1BB527779417FEB0351C69A -06231B2BA6939CC21BD9414B9C1C1295D6BA5745B2F6FFA498C20964AA73DA93 -F2BB60822D88A77C029C81CBC8118F1369AD883B16CEE5E59E892A027681D02A -D67B1389B10A2A0ABF8F22B6F8382F06F3CB90CFDA91AC45FFFD7AD3A192DCE6 -14201D03D9C5F6331137715B6B10D0547434E4E129EFD3ED59C5B2134356F265 -E2DFA95CB62EFC4B820966A9A172E5B2A134D359D777B68186704FAF7DAF575A -D201A26C6194B9FA36D41DC291A62613B5522552D2CFFA81D276009A8612212E -293FCC8A5C85EEDA263009C4FB50ACD7B65555A9174AE37B1DC8264A15225426 -C43F8A6ED11198FF1BE2ACB099D3A03197696AE50238E20ABB729E5E52571C77 -191CF13CCC1401723756C86B0A420A0B906EA5D42A64A44E519F55E03AFC0661 -751F9A3C792E69FC2C33129196534A91F1F939092789965E9477CD9BB709ED4F -FBE00A1C99CB740844686E0376C00AD3EAEEE30EB00722D4868842EE0892E746 -9659A2100DE024835D5CEE113295339BDDF6DEB2A98A0AD1BFD3B14F635D08C7 -AD869861D8996F6D62C1E427117BD63D64EA42D7BA83524496C4987056CFADC9 -63125C0FE0140ED103B5D6B0E1AB36A0B1D4CBF91F4169A7D9AFD33DE1797C81 -9CE9D164F82D8FE0A418F6C507BC58553625BAE9DBE8BC9C32EBCE696D794999 -0CF08A51E382D9D61BA9A775E65AAF66530FE0EC1AC59169B9BCB4639D7BA735 -3F2EC8F2717E3FE8D5DE9FF5455B965D020917253C4D2547F2181C4D654D212F -3FC05C4228A594B7210983D1CFD275B1FC3ED531ABF2ED9C2D7DEA0A76803647 -F39332BEF79D7E9BC27B37DB13A0FB28589853079C450D5CA4DF04DB318C960D -99AC8299307D088A4FE960B7A9825996C0DAE4D079B7432BE00BE3F7464A964C -5C3C3CAA002B275224F74A1D321C88B5B5A1C75E4BF4D6CFA08A5757A9170235 -D6FC628111A061B5BE909D9DFA94D2C9AAF14485C29C8E989E4AC62BFACA48C6 -1446A1815C66E27532A8C4739EA1B66CF6C2B1958EA6A4D5050437EC38EF0611 -8029D9239ED52DD578381676619C50EA37B607B850897BD128127EEB1E3D309A -C639B8EE8EE137E869CF4A7ABD7A95C91A92843F10695BF222727E1468E3C441 -8EA028EF7DB486CF36F39B3FF362C8B1EC317F3308593E9161D3344B0EA7FCC0 -D2F9DE79BF85D1FD4E99C08C739F6912D31D564D6CDD5259CD1C4F8A6CD880FA -61B17D640C53D0FDA25243FE24145E591D5AE252F5FFA4D915F7D5A276F24734 -C1871202059121ED1925B364F6CB73BC01ED20F15C2DE3B8A57BEC3573521A9B -983424E10A5912C522B1C3910959709D1CA6059BF5D62CD29F839E8990DB94A0 -D2F2F933E6222C7B7D2AD2CFD06A7BE46A88D0AF8DAACDE46F75D49A34C4F272 -AD93FB97BE8954A737C1703F7A0F838F1D0B3D5087ED11B65E48EC276C768325 -A3BE5EF5D572A248068D9E620412F1B3AE3B7946A213712E31318D888CB42AFB -1747CE163ED1CA8A3EFE18FD59ADD9911A8D8106104514123440BBBA69E5CEF5 -08B630C56C95328280FD4B222DF082439F36A30FA69D24901879298B98925255 -7CAB87C2A1B917A1382E2A7B4253A9FA3A72A7AD0236C9D75910DB3902C6D3C5 -2D81416C240740255CA5703A3EB0DBF6BBACFCA8A76EE8C5F5F00D71234556F1 -5EA0C1FE6AF7D11E5AE2430405A0031F82BC23C50F689D5521205D6188FE143F -C120F809C26E1628F32CC760D4DA7A4781DC7EF8508ECF12E141F2D9AC668E8C -6E6A41E979AE5CC8488B365F78C9CB2C9B0B213AB9A57EDF56E618B189129E95 -DDC72CB8A9DA836D83A01C5909BFCEBDF3C696E6DE0D1144E0BA3DA3FA20006D -C5C73BFE3DEEC1FA9504F2F09B34C269635F6FB343FFFD7BA1562539EFCFB33B -7448C2A38564FFE17B1D9CA7048901FFD113163499A42776AE0A30947AC65D75 -4735A13414A2A533A0F1575CCB273C435E78398D74A731E940B750CD4F90FC9E -E03A7A20C25141BDC34A5D729647939D4D90D583CBAD8DDD432446BF28D60362 -958F81E6A99F0CB2DBAE71D6C17BEF29ECD901AC4344F3BA01E631467A9938D0 -A1188EBA5C2F40FD98466EBFEAF7D4BD6E7FCB269B0992FFC5BE3AA4F1FF7AE1 -6A5CC0D5D4E1DD0EC2F1B9B879785048BF5791B06F628482A44159BE758D62E6 -E52911494CF6F0E8D0EB25ED90D0641990FB7A39230B47580A34D29F2A900476 -A515DF6568B93E22C53C98F7C36DE18EA8B4D501C16190A7C4C91EB7BF7BCB60 -74FC91B34B8A6536FABA7E00E0955F5E7A8D382123C7A01D480C8CA3D67B2D74 -10BD37407A3CB7F5304D5B79433FCAF67A27453A29467C231B4C96F0A5244EF8 -66939723C6B14C7B8B12EABAA8B71920FD550DC8B709333C8680EB548DB9734C -B3759DB19C0AD15F16D3558570A1B2CC7EE67800C4AF664886EFD5198862559D -7294CA27D656B76DABB77A757DAA94E81AC235978E29AF -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSL10 -%!PS-AdobeFont-1.1: CMSL10 1.0 -%%CreationDate: 1991 Aug 20 16:40:20 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSL10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -9.46 def -/isFixedPitch false def -end readonly def -/FontName /CMSL10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 42 /asterisk put -dup 44 /comma put -dup 45 /hyphen put -dup 49 /one put -dup 70 /F put -dup 74 /J put -dup 83 /S put -dup 87 /W put -dup 97 /a put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 121 /y put -readonly def -/FontBBox{-62 -250 1123 750}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA0529731C99A784CCBE85B4993B2EEBDE -3B12D472B7CF54651EF21185116A69AB1096ED4BAD2F646635E019B6417CC77B -532F85D811C70D1429A19A5307EF63EB5C5E02C89FC6C20F6D9D89E7D91FE470 -B72BEFDA23F5DF76BE05AF4CE93137A219ED8A04A9D7D6FDF37E6B7FCDE0D90B -986423E5960A5D9FBB4C956556E8DF90CBFAEC476FA36FD9A5C8175C9AF513FE -D919C2DDD26BDC0D99398B9F4D03D5993DFC0930297866E1CD0A319B6B1FD958 -9429B9D40924DC059325D9D4CC0344F3F997A99E6CC0676735EBCD685AAC9142 -08DAFEC78BB41AFC2F1C219910BDF41D6279284EF600B69776CA15BC8A34347C -30783C52AFA60FBE3E353E2AE354CF87B558776A22C776C7A0B5AB5CE1F941EF -C2D9CAC37294BF407A671F10E4743BF842143F4F7DFEE643BA3BBD8BB9E3F24A -BCCF7F0ADF8BA500620C81033EAE8C4EF2C1DEF13AC575F1B3BBB66F093D3B78 -5412B82B67FFA087AF57182B2230F9F2137180CA58A7D9B2C822FF04BE6CD01D -43B2CA7058C7B953F6D9B5D6E91ECBAA5CDE1159B0E59C83DBAD96D6C8C8BAB1 -374EF652D10C0F3EE7104472C98DD3572AAF2D45A70BF7061447E21EE3C3BF23 -DF39C2D1B35B42CD5297BEBE6BC94F7C9DC6E61EC67E4F677256FED9064BD3E4 -B51A71B1D27CA4E5AA9E1D8080E6DAB5310711EEF87C40859FA935B19524AE83 -63B163FA8397BDFF443227FEDF7DB27DC35D89FB1C5E435DA0619A5C88AFC73B -89A2DF5E767C5B536BC7167A840A0C32BD57A14DE69A7D0D819AC36FF32F908A -5070F32983BB007437E3500799DF5E0AD3710A4C0000F0098D5BE99F2EB9C1C2 -C444FD9552D0DCA098A94B3BF176F511CEE13DB7EFFAED7C47B5ADCF8D4700F5 -7B6DF50EE617C00966B9A2828882804DB7477F4A8CF5345B7F3568B4F72BCE73 -2E2AA5BC4B4C70E21F3AD9AFC3B8605A00D67EF9ED1F4D13DDAA920D45B43CE0 -0941BF17CF05D2B777C11D4D844AB20C0693D1DDF00B27D9E1AA2D98A4A06CC6 -D342AD8F644F4787B66CA7D861E7CE13FCDA85C1B0C9F94009768EA89838EBA2 -7818F40A3CBAFE9BD3ABDEC16E56A061E3D8BDCAA7496A045A55DB3EB2D2712E -AD9D0B0A01072845B118D703585D7178D2306EC2D431C59708D066FC0631D814 -0166966BB1D20080DB10049D1022989E3BEA3E88B7D448A6E11CCC2EF181C85E -07BC7C52DCF06C10CDFD186FE1571EBD33A7320232BC930E1C24E2474128885D -9119E6EBBAF80BD6015FEE94A5013A074425D65740F1C9B139AFDBCF7AB843E8 -41F9A080CC231064EC885A5252649C7E9FD78E314D50C4DD9A43BE0CA22E1950 -2221EFFAEC3B0D83B1BB3E35F871077622C8B7B2CFAD7DAE3BFF0E3814836083 -8FD3C852AAC0B0728EF54E5F9967C494636B5DC17C6D539B1E72D248F3064B26 -8386B3844794F26DEF6853DCA972E15324CB1D2119D7011C1AF4C3D7B6591EA7 -80883658E0A6807C052F42B61638F650C15D427C253BCBE8F3830B4617014488 -15700EE0439C5CDA4F510DF3465E1AAE17887771B35439B699B3A7A9EEE6CA14 -D02EB76AB25B5B7381415BF4A2E730E0A80C4F72E8D7007D5113FCFC7A9F445B -01CCBC45E99F86239D840FCD3D588E3E128F6F613618B50BCBF768FBD373DCED -42125A459DB775A40A7F76E39B0AFC77927EFE9F159E3D1CFD11E41CFF83F737 -28267F4A3128934429DC0309DE53618F51AFB0FD58C2D978C193F1EA19D16B47 -F56AD6643D37F7DA9C396E3C8029F98E65F6A6873537A0B57A852D1F3EEC36FD -2E3952266E6325BE4196686CA4B7EA75F4A9DB06BC97AD99F948CBAB2EA169DA -D079DF5C2F300D86CECC35AACBB7B49C1057A70E61886623FB98E25BB3A92320 -F2D77F8A3DDFA2D6FA3D598741DB8DC28367703373BFCBAE3C3009E1D6D39B2C -C6C094A761C61D7F4723BEEC4F0C9458A528FDFDC344C23F95CC1E26D0309F2B -D1A2AFFC9B952B3EFDF90E9D645A4B45D63103A8E8D88EE21218D63AD5AE2BDB -A46653268D12A154DB51C7A58FA4B93E7A5937D50BF187845CE96B248DFB19C5 -99D55346984DA6173D893E5DAF138E16952C2FFA39549E7BBFE927AA995E6A27 -42EF88CD074D779B05670F9171967727DA9CD41ECF5936C45EE71167C9DCF17C -4C40F46C8234AD63CD79B485CBF4DABB79AEBDEFDFD745FC580B2AC65682965B -250591B44B95B2FCACB8435258EA75E395B74912F4E5A811016277FEDDAD9C60 -0E3F69F532024C9D1B85C67671A29E46CD6BB7CEED4536C17C583B8A2208CBB7 -C8DF9587DF51921AF0F31360B3391E6D316C40D3B92BE722404AFC3BC2F0D75F -149637A5DA2585020DC6790E0F415639FC789B5AF7B17ABBF2B9EBC517576FCB -7E16C10DE1577BD4FFBE1C5654EDBE7BDD6FF6D18348C21393981C1C1E3B4C60 -FD0C2F99719E87138CAC9994E346591E3879BAB9954AABF8B1171FE88B4B461B -7B3B9594AA33DD598FC1881635FF90CB605951FB20B6726872D82777B37B739B -9A372D9162E4DB72EBFF4E7D691F24A9751028317AA20DA5B7F463D79725D596 -D3A6203DF5D51D96A82BDF2C62EF925F45B3AEAF135408AD0562972EF01DC686 -8BDE1BE3072E5D717FE9F4623469BA557C33866765D4563FACBA00E615AC0750 -45321E8535851BD89796FAAF929CED94E57AE67F7A8A1163613EE205F6D8005E -5F7C5D4F2CC25AD3776855F84D827F96FE80103EAEE8B740FED39149FB8162FA -0F9E76E3213327E7F24CB055FA327C4827A2252375FEBE6A501C45AB528DC658 -6ABE430E25A972A5DEF700730334CB58E54C983DE5A56E41B29B76BD3E2AD1A6 -6C10520A7C651DE43A525E7535E4F4E6A81FCEF5A4DAD2F2541CC26432AD8713 -C09B16FC4A305E44A1DD538803D5936AFAE28BF5870A7585BF40EB36E24A3650 -B464E673FAA258DC6F41BC844EA90EBF80C39B7FF7DB328A394EEFB37E12F011 -BA2A8DBADC26A19B7B818CFAA834F479A182F0AE16F1898D0511A4076B8DE1D1 -3E9BB210FF930779431C100768DC92CB2B981F46387BB7B6B6F9C9CE775CEB9E -E51A8AEC07B799D58748E7C64A1C030ECDDC4C074B4E1B4AA4ADCF24D8F785AD -D342BDDD1D49A5071B37EC734BC91E06A599F2F96618916DD73C6722FAA39E92 -03F9F078E0A1E5EEC7D85771CC85D38C0A5D835B3D10C2A57A14D1847F6568D8 -1E0B6C2C34A29ABD213DBA1EFFCC2C0EBF82CE289E5AF8CC1D12325EE22DF17B -F9F85333A859D69313035A7372EBA717C94442D84E76C517C856AFCAD46B7B86 -5991E71EA0193629440F31D731B0AC9BF1946002872CD75A681080C8A3F9722E -17840788EB6953C8CC6C8C07079EDCBA9CF1A490E5F21C1F97D73CDFA69A85FF -624C979CD37CB39388CCDDCC4A9AF90A733A41B4A2AA19B7B460369447F77B95 -80F977981D0AF2FDED3882D2EBD87B4E61003B8A3EEB50D4AA59063AC2B095F4 -455B0E3B5223C50EBCA6726BD030C1B361816774B62A6544C0772FE4B172CD79 -22EF2842F2454B949F1E136F4ECA260522D4BA3B96C360274CF4A53338D9EF3F -CDA148123993CD1446739DD3A91D8CBCEC2641B18F517705E5DD104942713E8D -41D9B51DAD6647925A8DACD925CFB31B481978E25934F126EF8D07E2C0528103 -A52AAFA322F93C1C6C7B762870FD4AE5C66DD3CE7092BE49C16CFC9A6B58C2B5 -127B04C953FB1F1D03FD15D93BEE09B2272A2D173A8B8EC6FDCAA69D0C32BB8C -67B9D2EEBE97535AC420BCC58E3F9BF055C57B4400A58DFE2D240DBD978D09E0 -B464522DC94EF44A0A443B8BF2D73ECC08DBBB49CA8F984D8FCEA9A40B284281 -09E4C0D7EB58BBC0702386782A8E22C6071B23BBA92489973C01D7D77F1A2A98 -D7E670EB64124AA8C09C2550C944E922427071C453880CB1700647F94B194B15 -EEF7F2981EDCDEF3591CA65BB912FD6EAD258A68893D0277E9B5E718EFCBA5C5 -0ACC45329E6B108BE3352CA15EDF9A6ED489438FE8C4A7D193B8D9B0E1145917 -A27E6ECC57F3926AA6A882AFCD751897C4B22A6AD3C6AEF20C4B05F2162868E5 -FB120E5F8D971952B727015499B534C6E56AB71380F78BD93241DE5DEFBD0633 -39460803E947A3BAD8A1D6E2E884899581ACE84137ABF87A595E8A9850B4ACDC -F61CD5B284DDD28780C24D2941A1062CD433E715D6F4E238CA8CDBA305C3FE5F -82D6D34B1B368046F3E894CEBE62FBE58CDA9B9B4E04D0F991307BDACB09966A -EFF08ABF5A2F4B12399CA62EB3E4CE3BF2E47D6BA9B53C5B6A4A2B55BC54022D -7ED98B399B40B9A702614098D4FD6584DCF539346DC3EBDC15213545BF4153A8 -D5EE8BBF0FF20D54FD738BAE955E2B6F96DD0343D259532175E1B67C4852D31B -0638692C1E7B49746064F3708A9E09EEC84E93069B0A0AFAC2D5BFA420072568 -B73587F9D160B1344AD7BC659B35CBC02E1F5FB9E94ABD1598A90FE8A1DF3F0C -95F942395351C765BAE3E4E993EDA98AD3EEA47F248CAFF122C0EA1802A36F56 -A1E7E92246136BECB2460B01F0BEF6915F1C2FA2B377F1857644D79CAC458E7D -1CD55747511FAFED8863D8FEC568105FE3320C4C5DA5816AE4310449D412E86E -63C19EC6EB57A782224DAF30C864101287CDA0FDAC83CB837EA787016B40CAE8 -F81E96E186AF5BBC9FD43AD997D2BDE0DEDBC7BB3D77406946B4A73A15D246D3 -98686A1D69AA38D8EDDEB1A950C8F19999BFFD0AB4BF22C855945A76E91F407E -93218BCB50B407A7A3BC467D386C5178E8B7783CF67A07B2850655D6B02E82E4 -6F7A5A75FC7C5F4CE07DCB94816627F38531239A0333A6E9B5C52A8FDDA9F4EF -11C9C069AD5E91FB140BAB9F743CB4AA42DE249B99012E73F01562319A45B4DD -C0D60AE5E829E948DB38BF14CFD8C4FA83D3C9E28B537F704D204806EE161325 -44E4E73D644820539BD992085508E1E7EC278C78804D52727FD40A4A0AD86B1D -5CBE493941DCE82BAAE014DCF85D7893103726DB2CF7524808336221A97043B4 -7E08671801BA2DC8032424F362E545275462D1C0212F64E439F3027DEFC8FF7B -27488C5CB42464AE8A289E759CC1431D669B339EBE31B65043BBB9856FD6414B -CBAEB80F47FDC1C64931DFFBA0B6C552230115A30CD88234E460DEF77583A467 -A67B2B01F6263930F9DBE5DAC38E2C98C340E896EB4DD6FEBE14A5573DDB6D64 -36FFBC63EBB55728873E2F1B0F065A7475DBBD17DB489C6D0BF8C85F94C8D71D -CF2F8EE428079980742606C4475F475EAB5899C9E80E072134394638428B4FCF -A9D136A96DCC1D554F3E178016194E52D2AAB4A743D0928517C2D52DCCB645E8 -F2FE55F48D59F328D36ECFBDB21AE2F549588A165358BEAAA0F8D1D9E74AB145 -554E0E5B18D0A547D7EF59D991C56DBCAA96E5C082D7EF46D1C815EAD659A0C0 -601C579087853D66004BA58A818D65891D455C4CC6AAB94B0589BCD9DCF438C6 -08B177F032DEFB683EE5900084FA33DE563485719D632DD7D0D432660FE871E8 -426545ADBA1140CDEDC5F9801C378C534E25CAB24F3331973DEBF97ACBE84C3D -B56026B0A3D73CB2874B97E7AFFA512C2EA5DB509602ED15D57FD768AF6FFA60 -CB210D64B02284DBADF03C6C15F7F581FB8368A20F9B30161FE79DE03796D59F -974CC627E9B7BFEEE51EB74A49350B2630EC51132DCC3FDBC157AB39427A3342 -DCF4B032600077D071B600AEB396534C128082A50FA6EAE7D4A8F0F72B933D99 -6BEC6BD8655502AE0D9B23E6D3C49223855320782CF9C5F6386971E314E68F03 -71F7E44A8702FBFB32C40FFB94DE1B3D41C98C85FAF8F9DCFC7E9C3BE042E298 -4369EEB3222DA615FCED23047A9DAB956ADCA061F4B90B2524392CFB9C3C704B -D2AE92068543F51D68DFA4EEB17D3EBBA2D7C8BFE8CFF1015AD696067CD0760F -F889C8B0DCD0830FF2095A220E674F32E3EE8013D5408A28CE3367C3CCB260EC -07BC07D33B327CD80D4A977F10CA839D5F1E5D969E9BD8F2B70A4DF954132F8B -9F699F4A5537855D2E9176FB19B8FF90373FDA715505F87BF2E03DB6DA2DD906 -B7B31D43B21106898048238BDD2FDEBCBD6F500CF3F52D00B9E1AF28081C04C2 -D3B2AC5EF946FBD2E217729BB37938F8621E0E29682E50AF217D784ED2380786 -B88D30703444C9ADCC2B8DB6E00B703B4FE2817107805419E7CD15D66DFC2C96 -3B11441C1DCF7CCF4D2E7DF6462D9146C02F9C754A0F6D90426C72CED69DF0D8 -75012645B886745241EBC350EB8499F69D1DDCE861C1492692E7A7ACB548FE87 -ACD4D9A014239ABA8F086B3CD16412CC4E2195E51C6E985EF3DB03A98B74A8B7 -F2440C9DDBDA65BB020C89C6DB704BCBE120178F79B1859491AD6D43CB56EF81 -330D3A8126B91F09F751E6E29A06654C3DE21B68B86D25FB93087997267D4EF3 -D46AB3339481306B932583A55066F3BA8A4BFB5822EBD0AF82FB6040262ED52C -E0505154B618D164F658D8ED4A949CB989004D2CA045BE1B6C13A67E8EC1B524 -EB432FD100858C7054A519FB470C3A5269FE4C25BC000A326E310E8CE55DE50C -6D9F5C9754E83FF5B08822A01A0753F316E25AF68E4A875348890485E1616274 -2808EB2E24D75580074E9977B8057E406DDE63D54F3405551FD4A57315BC40D7 -9DACA854A6A568EA69FC252C9D5308B177C91F4DF6C43DF1256F65E67449E1A3 -AFB063720152E69A513209CEF8B9DB92F3116CF3934DC71DD70DC84BC93361B2 -C6D6DC275A84F775E25FC5BDC4F1B039A69BF843D2F1799140852B0BEDD56B76 -0ECD00F47DA42000035ADFFB9627443445AFD17845E4C1F140A66D511626857D -60E264D0B83AC96B1C48D44E41224911D7F115107647E70E1840B49A3C696860 -736C7CD905129FBE0D3BD82AF2AC51E34C920BB8BBB403B1FF14DFE7324354DF -B6164FF2706C40A80D1A3861BDB1E8C876704D860484FC5F3B9D10CD7A72618A -10FF7AAAE8803FF3939D99C1B8DFE383BCDC411847D557D2F5B4E383B94BEDF8 -597C8150D4C0C3330951CB09BD2CA5616E4C75583C9C67FAB14F18269A3A215F -87D7E4A87158F77BCCB230787D7F31C6763B9C320B450C74E526616AF9E5AFC3 -CDCB8ED572B536118C774BE285EAB3B2F50630ECB34E5E729A25BABE4D4B09E5 -59C11EB1BAC23CD74EF2595FE0C39BCF1934E6E16557CCD789AF2C8D248008E6 -CC693CB89FC05A586B96818F5CD4624C99D5195EB585CFD0AB48D2307FC769F9 -46BD64068A370186510415A37DCE005B3CDC993C5E5D44361A8F6D2BB449C3DD -2E12F12E417A6D9F933F375A66682E6B68C8D08A793795D8E687B1AF330AD61A -0179974C61BD9352AB4AAD22B5C3A520B777E81D6D3D0EAE03801BF449332D40 -BC6483013BA052AE034C6E74E0304562C4029052DCCE18A4B4BB962B4252BF03 -A6FA16241D5F47E3D31670B4C034619DD64BE7456C6236796A5BB5C05DC4FB20 -A2E1065F3B98A749240BF97C982679D07F2C74D06BE6F4B1BA3F63EFD82B1CF3 -EE2BAE71542E9E7403AD59ED0158CFC8D7D9B680528D8DE3CC753A4E3B350E03 -A90580D592846C0249C8D0F2D24B8D26085821758425233492DACB8A5074B1BD -E5D531F2610DD9243BED758B000E9BED44113A2D82BCC31E718F4BE8E9DF494E -5621BC341B37DC790DD97E254F24F57B668B3D6A2562F3F705C27F6F9B564063 -B1952888D847AA7F5701C649C62CF5B83142471715CBF81C4EF513C4260D5A5B -980A2B96F36F37F52509252F0C8D87D802018C1DBB3768030848BFE3983B4822 -38FDC2A35163C44F7F55AB556C29EDDAA0146E9E66801B1780E86FD6AEB8FB84 -9D73CF495D800F2C09D99293F222272BD613172446EDAC65D131EE88E08362B2 -9270B016CF74D059EFA44B37497C2D694CEAFCE06AFEA6DB493BCBD4CEFE8F03 -30628DAB9D2C720AD94ACFAFF6692DFE5C75D9DA1F09E62ABB647798D68634BD -AA3EF0208EC3E1F42BB7A7F77617DB452CD7DA99BDF6742742AD6A4FBFDCCB03 -2AADC281CC6493738A45040A20EE8FC7DABA5612A12A4A1C14A2E85A58A8FCE1 -AAC9814F69507D49E458A18321A0A4BB97B38BA3B5A7C2C07240019BF98D2BF2 -1A2DCA37EAFD96E69BCD773163729172E52B33B7E27A56F57BBCB25298FDF85F -8BE3E9286469CCD28F0875E9550E95968BB46D9546D4C0B3F35BF776AEC9CFB7 -818FD280955293EB672A44083D3D724A2D1445F3E5BBBD6811F38744185928D3 -64BD78F9B5943F9FEF1E83E0E98056433263B4A1085018C332DFE5082443AEED -318D97E14B48860EF380DA1AD90D4885D3E9D6B10E8686A2A5B3D6EEE8EA26E3 -89A1CD93C51E4C5A26943D86664551E3926B06176905EF00597B71B0D2816313 -63702C0C0CBCF117CAC0A0667D8399ABFAA0E1F6A531FF8A2BC43CAB660A93F5 -8F26550D92F9203E404EE4F45F2B472F5ED9C2A8E18A89383330A3E2EE42FA4F -B3532CCA28910FFC74E3ABB69CDE0E1B5D2AC466BC52883AE14C88C780841BD8 -4F71BD470B26D17E6E8FD96252BA1FA4DF9516C762A28D659A877F79E23E5D75 -B1DC530905C9927BEDA9AA5289A167EF6BB4CD26FE2985DA4A940015FB15C87F -230DC5A1B25F40FFD7F4336F9421106873FA7ABEDA96AD82C9E37C9BC7CD3FCE -2999994F1F213AA69CFFB74CEC9E6A94AC0D579910C7C015CA8DA8F37B34D2CD -126CDF54B815052E46AA3DFE319167CDDDCF12EF6E71CD663E8B0D782CCE5851 -B82120513461C30820777ECF1C721B5C0884CE48E4E9CA79445FD6FF125ED099 -82B6E10EEF47A8025DD6CFD0CCA8B06BA591984F99AA06F5202127FF29D47F85 -91FAA2 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMTT9 -%!PS-AdobeFont-1.1: CMTT9 1.0 -%%CreationDate: 1991 Aug 20 16:46:24 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTT9) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch true def -end readonly def -/FontName /CMTT9 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 37 /percent put -dup 39 /quoteright put -dup 40 /parenleft put -dup 41 /parenright put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 51 /three put -dup 55 /seven put -dup 58 /colon put -dup 59 /semicolon put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 87 /W put -dup 89 /Y put -dup 95 /underscore put -dup 96 /quoteleft put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 123 /braceleft put -dup 125 /braceright put -readonly def -/FontBBox{-6 -233 542 698}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5F00F963068B8232429ED8B7CF6A3D879A2D1E -2931CE5F5D18C658602059F07BE66E6EFC9239D7AB2FB8A4CBD41675B8ECF279 -650C29E53B14AC0E392A664848C1844B1CECBB2D5CFB72D0916B675C9A9A1E35 -F12696A6F628473C604A95376468E06E295AD6F76CEB939D94113532050B9D5A -D2F41A9EFB9424D986612313B89EFE9C8A71313340B248F6853B1EDBF02B7F9E -F447220FE131D7D54CFB8AA1281DBAEA73E665BACB1F164552CC0CEDB63BD4B1 -4A9AE8AC6FA02242DBE8DA46B64B6BFC11762F0784F216FC8B9120D688D1705A -438B14F5E5DEAF2A98408B3B64620DE3732A4DAE6D08D5D97E34C75DAE19EABD -BA0796165C1151BCBFB1DF8D29A63A8300DBDB9E3323CB82D0337598B83F4F2B -A97CF5196D4D1CEC1EDB8966E548C0D9C194C932319610FB43EA1B86322FE641 -AB48770FF13BD475A7267E142388563D1A400419C585B22A9886074687BEDF74 -D905BE8EE440BA2ABF28EAB673399B7F129B9729DD5564C681954621903B84BB -CAF89AC5ADB2932472DF29ADA2BDBDB4D05F65F28F5F4C529613D61858E0074A -082A852710A62A147C966F2B85B51B0BE85F11D2057C66FDD61F6C5755367980 -9F4DE680601D4DA41B46F8D2148450000413C27AA39B586B74B977B25F0FD3C0 -4BA1EBFAFDBEC531EA1210365091671CE3C86A6D4BC591C37DCC02570042575A -9D24252D6E01A8603753934D7EA5CAC1BE4E5AD2BA047DE8F3983B23A8A1511F -B08D373B69E5076CE4300137B8805EBCC0AAB89BBB312A77835795E3C069322D -42C893A30AD739E2BDD299679B158F7493764F2321E3965141B5ED1C6F4765ED -F46D391A646B30C90002B1C461AEE79E5F094CACCA656CEA3DB921CC5205F328 -A2C69F817061D6C60B121EEE844CA5008F23DF098C1DEEB7C8525A11FBEA53F6 -98A9BCA2389071966670E9607563B3CE7E25AD67D95D4927F6AD572015F4A59C -8C618A3E7BA431403BC01F92F345DEF735A30ACA3B55B48B04258A2E82F69643 -BB43967E4537DEB3745B4E276D6AAF0ECB79052F87DF71B2CFC2B8280DC2A205 -30287B658793532220F980F87CFF6CCB40AB0439297ED795BE38C34B19D438B3 -AF779CA633952D6F984C7A5885A627D4578BEA33A4AAB8AD0AA20B3F497E103B -64F8A3DF99B120CE03CEFD4F53945CD81BA0711100E332DECD15712080E13635 -5EF2AB4C6BC0EF4FAA879390F71E7CABAB22BB3434E03CC272E68638810E4213 -3E5F79D2202097D3597C7DEA0801441AD4ACD6737D8931C161CE677EC7B62D8D -EFCBD4196B31E622FD652C9AF3219E3695D95C6EA2825456272BE77F58E6C550 -47284D40234BAACB41CAC991BAC730396AAFB42342230DD6CBE47EAD192D0E9A -0891BF77AF840FFEA18F938E8B8C8304AA7EAB76116C1BAB98577E86F516EED6 -5CB3E3C923DDA90A0F64B612F61289DDB52BCAF6AF0C29EF0CBC9AFF87414078 -588FC1E8CB1A7C515CE7A2C5BC7A192E0A8E0F3162292FED4E663CEA07551CEF -82487875AE849504645DA2C2A962DBF82374D85C1BC9F2CC46F501A29A58853F -2FAD42C68AAC9E9EE68C65A47461A6466884E059670099A8CBDB54ACF54D60BA -BB11B4D4578CD7574EF90B0C03FCC72691A04D73AAA2302E853A93654DBBA8EE -BD619E82C7D83E77E0C932C2E7062371D8F2DF1F6DFA9E2636C863B83B4F2CC2 -090BCC3925B4682C9C8342708EE6F1E4958ED3F2D926CC2EC3CDE8AEE0BE7578 -D3A9CA50ED1E981D426C1145732D124451183C2E9B3BE6D92337A8DAB42EA95D -D66F559D7500BD83F1534CBBE228D59CE583260524958EEDDA92C518A08A2F8D -D3A6C9A663F6F178300A3D1E106CA4368ECA4DC3F1654CAD459D492C612B89E7 -A73B0D580DBC2D8C2F1C4DE9466154B6AFA3D2FD6080FA409B8D57BC805B6F4A -5BCB9F7117A10A9A62627E8785F82B66A9CC2A6420F57A2A84EA372161B0DE45 -2547D2E2B6100AB054681C488F421FEF1966E14072D65571FE2E17A2DA53F97F -2AB479094E10827D09E6D93799B071F2358317B7AEABF10A6F32FAE751970043 -AC4EB6EADB7AA211F02803938B8C668250060C961039CC61337CA7B18A5CBC6F -B0D73CAD8214D70B51BFE9A6F5AA2134F3EA364A5849998963EACA4060437EAB -B7B1B0282F689C220608E90FE9A48E94EFA1EC325E519E19F1EBDB2301204629 -BE170567DC4ACEBD3C9E77F58A18C9E7674E74DF14C06C9B79F214B1D9D68FB6 -7B00556467E1ACDD873CF9C69B9E9DE4CB6C38385545D03463EF413652DDD8FA -546186B39AFC9CABF1C03988AF99E40DB41D78DAF0154816B06337C0F548008B -A296B2C72FEC96D90537F123E349FC71F5FC3211ABF4204A392974F472AB1B75 -BE473257575CEE78B5954B201B07F84F49E3CBEAE74F2344356D1D18C8DCDD50 -3160341232C5C64F6EFE6DEF4366A077DD56419BC5E5AAA46204583282DCAC06 -EFB9ED502FC0630248476D442E4EBCA78A6528D56251E82D1435B537143F5CBF -9B4D50C8FD5DD48C3404770471A4EC244EA3E1A29712FBBFFE73582AF4B91263 -EA829C0AB264AD1B13419F571DCB6E8FB68F643C4621A68B9EB46AC0A203CF7A -4DFA6439EB79289099D6150138A259D69A88298F40EC9DE6E0C6D0166CCAB106 -22042C8717E6699746A4E4500BCAD2CFD962BE58BA90D2F3C324899D795835BF -517AD51325C84354C799ACD9312FD1A68BF321DD1C570A64DA73F09D93F06B14 -3C71FED756E583D7E62651871532A9A9DA08BCCB45AC9DCEC095060017D7BC0B -F366446AAA9C5BCB400FED24E9029FA9C302A2FD1BE1F1623E0542598D631406 -72AD661D5543C8E155BE180EEF97927F7D297C7891F116FEA273864B4F34D015 -A46D3D4C1B57C3F0147585C25F59AEBA6566D2A1FADC2A2BD501E7049F4B948E -8C48A046F894F26E401A2947793C431FF80D5FD39411E2FFDCD1CF240446F62D -E1147CED8F14D7C228EA87C84DFD1091580368000A4C7D72C522D7E8F00F5D8E -4228568FE0D0B5022E156E78C2FF712D6328AF0749ACBF204AB2733999017D4B -DD3FA855AD1E814FD22D2000BD82A09DF349A6B04FEC243FC16292CD82A73075 -F14E7C349A61E2902334C21DC5E6BD1F43892A0E293C8D23EC732BF0B437ECF9 -284873394803C28728D538A3EAF598E877A3B6D45DFF61AB8A510627239775AD -9EB716DC52FBBC941B624BB6A811D1F1E0499032AD1EE979D81F933D83C4F01F -239F7A51191E747A776262260C606426DB43F5FFDF7413A74C4838D370AC3123 -B888D7557335D205AFB531F4A731E708DA4AD6C6DEC091F24A3AF33F1F8AA506 -3C2E1CE8C7A5893244C69DFA95DA70AC6415AB9D8650DA4A6E9C5AA347159DB2 -ED57F24C7EC875166C12BB7C9E0573F6FBB499CD454D596424E3EABB80C39B40 -1EC7CEE366DA4BE6EE8CB8B36BCA1B7861C9B6E2721163E81BC2A6D87D5092F8 -069D41A0C2036751BBE07745D745836461688E7DB9623D58E01D0E9FDEA88130 -8E7352684D89AFE8DD9E011BAA66598D777155CA7B465614E253B13B63204093 -1F855288C0B98B0D3190ADDBF5E87204455F44556A8CA5540126ACA44639017D -4AB89665FD51F5B29709B987C7C6F7099FF107BFE7B164D2E875A85CBA8A088F -D30E56836EDCB684DC803CFB800724B0B5556D2A7C018552BF7AF3056DF735E8 -870FF3658D757FD8F2177FF787436C6198026CFC32E9BC779C0FC5DD1E45F354 -CDDDF4CDDCC822B75CFF4F0F085E9908AB9D645CE8172B1ED969E2B58568BD2F -BF2263CA6E814BBB0EEF1AD56BA8B3338A707E45F1F63B88BD13048A550852B6 -67DDFCA53B34EC224AD5D318B7DEB4B716B4D7E839865495B9F02C622DE9E7B3 -3A5122936AC6CD85E5E820813B96D5991EB331CCC07ABB27F0610D5B8D93C6A9 -C212FC47EE042D091EB967A16C3B856CE98A6D77925CD90F7CE00E0EF6EFBC07 -092DF61D15356B1086F69016194CB500FC4E78C68026EB5690AC583A39F3BB78 -89CE6AE85B7399531281814566F305A6CC7EE4C23351547970DA591552E55D44 -667746AB7B69A7B9F72EF84CA05C8B55BA2F2813B8A7168C12058056D1C004BB -3C590491F07752F21889BA6A304C0ACE9E018C533BEFB136A14470D42F2B1702 -CA899800A832B7D169FEC902AD96AC59010F4E760FC708DFC25CA2CDCB18FD1D -B1CAB76A54B8010A7DBDF8C8259E5692714C9F6865C7E1DCC3DD36D5AFCB3308 -2BC00FFC4AF0FC58390323A7CB5471FFDCE3D0F0DA0C90532768EC4E75B398F1 -1A6A3598CCD0CA764A52DAA7B904089BDFFDE26FCA6C8D79839B59E389BEEEE8 -A316542A1E34FB625D02D53D5CB45C85E992779105FDAAB72336D9A090290AB9 -E1A1CBF308D6F9B4E809A9C9AC6C884A07DF64213C8D11D1F68336E05C90B63B -F19A613B7325C078816896D24BA0AD823BEF5DAEBCF36A0D21526D997ADAC3CF -2AAAFEC6434BA32FC483E3751061CDF66956B246314FEF9007610A8D3C5FBB15 -CB195E5DA0BE543ED914D7D8B3A7F91302E27E1D7FD20AFEA563A89BBAE5F5F6 -8446592AAC5798AD1E12A6645A376D1E2A4A3D7A642A21941E08D962C5A1C65B -A7EEA14033EF11C2141D334F3FB706B8DD973DF78CA023C68956EC70311D16C7 -232918F103B72CBBD6AFA52B332C01A2D70CD4E8115E59756C628A3F90AA2183 -53B362FF63AE235B2B3735FF54CC0AE1B6F9228A63A7D26D37DF6AE0198E67ED -F582A3D86791B83838D5B6BA78D0EAD90E000DA0091B5E3B0847B7EDDBE024CA -9B59283BE3A71B3E598CEA4E663024E6C6B91D8D14090D3DA7F9B11C447E92B6 -E88DE37D38A3DC0D054CD58703A849C8981C9446B638FA6077193975B7763E40 -E01E9F64EF040D5215309DEA22B76F428C9DABB4CB0F3C6B0D84759EF1C9AF43 -5388D9E06EDF2034BF3C044CFF55AA4C24C260C6F14905E664BED7BFBD608231 -3163CF949CD4DA8E5804ABB3932310853D79B245CF21023631DA0031F22D0DD9 -B0B888768BA4A388D4E1B7CA211D905E495A5253369C38E8BD55CC440A660856 -49792716D6B133B7DF6C2D0145FD4D0C32E82B36F8D3C4083B13AF8D536C572E -C44B0A22EFB895B27FEDA2B4F8849722822E6ACCD47D4E7052C61C3AACFA0F4A -C469446809295E4569C3C8B3E6FD162DDD09E86B78B6F516592497D0EE7D5182 -B50DDC3C8DB358C713956721D2EC1490D535B0A6D0C2511916B34FB6757D4943 -21918A1567DFAE0CF38C8A78E6F0F593A4E0FBE058C3FE7F9ECFAF3AD5FE707C -9EB61C58EF5224EBBCE0C59C21B8E81A974A45FFC728F139A6598C1DB4B65753 -3E30B21EE83722B6590D3EB07BB0EC5576B078818F9ABF14D4288F78512986AA -601C898AE24B1F9A234933997A7419C08158F741AB22F5E5EBF60D92ACD46500 -32DE53B95EE857F07CBCCCFA0D6AC16C55084EC3FEE4AE2339582E7BD09C1BAA -C1037000E1600991E00B56DA3BCAC72B53A949938BAC1FDE9E49B812446FA936 -A1D0A1DFDDFA38D8B917074C93B45F98B57ED664ED8A26ED68CDDB0013FCD1CD -4A0A7B83C456697039312C8F628BCF268D8FA47100B650128CB50265003F9BBD -743270196DBAEB0A068B47EED0DFA76446DFE8D79AD99B48681E0A93090F7E0E -765F44158F9FE895AA5729E9001F851A8CAC45DE0A1F4BD02035121A8A8AE1F7 -B26A243B8BECE53A8318DBCEEC458D93167547B3C48A62D3E72CFB61D7973716 -66F9C238083923289AE863658DCFF1AC7C8E0B63CE038FDBF4E7C3BAA1F04081 -9BA3F81A5874BADBA6D95A9CC8D48DF125BBF01AB7DFC8C829E3B24A7F661FCF -ADD7D786307CEFA10998080D09C0A97DDA55F33E1DB26776993A3E8FDC11EF81 -47CBE6265BC9EA0769DEE0C82D5B49DADC978B39FFB09AE09DCDD22755B522F5 -BA877717D5EF3031ED6AEC7AA1EA9F1A74E76EF146C51351531E7934C487B5AE -34A5DC732789CBB19D7D72BEAAF5C4C8270CF02337F8FE0751CC6D25BD5E3C48 -C4C89BDDBEB07E54113AFAD5F4FB7C4F33F84AD8DB5E34D9D64D6536171F6871 -6A67F70874F1485890CAC656C84BC92806D4903C0EC3F29108A936975BA12862 -73ABE73AC5ACEB5EBDF220B509843D658E0043E742BE67312A85039F4AE48157 -93961B153AAFD8CFC1C346A9A4F866CCD3751222388D9823C1B5A9ACDA1F2ADE -84432734A85FCA3B28AA8F71B0E20FB9ED6BB4CE6D349207E3429A1606CD0A1F -506AD97577E9FE13871792DE0EE1BB1EE78965442D47383B9079B9310D3C4C34 -9B98F72423D9B3B73A03DB56D2773C3C8689B27A03A1EB6182D39D0637969499 -0ED96CBC49ED0E96FF0176C092DF3C16169AFC5C41D34BD1739FA95D86252CF6 -024AB0EDA56F0CED192FF0CD3C67E65CAAA788C09D89760CAA7788B0B585F516 -437BFF42CB34A1758011A2D26764E510A6014758876D3F9F1E76759C79C8CED3 -9279F0A1B303C44B0350E66607397AD2D7D4057C1AABE8AF47604C867E433565 -1CE2B85A1924F88EF88A995063BBB236A8E6CC61F30E86AA35FC5D0B1EAC4FD8 -364554C9A449FAAE56681D42EC4C1207B4AC56B2C56DAAB9926A49762E189F58 -79192CD73C69DB8959692643BBA6BE6C6032820D1DF3357518C15F25D92A1A9B -BE6EA98834774FD03067F98A43AC4440767EC905D6EF2AB7F06022755AD03E09 -66F03C5262FCA0B42EC237A238D337A27ADAC00CC7CB3BB364C56162A1355D63 -11B316633F1C77B4BBA07B05C3CB4ECE5F56B66F847AF2343F42E339488557EC -A637DBBB753E1E7F8A1A26EDCA49A9801A560FB0CD23DE0C5EAAEE1DCA7CA1A6 -CFD18FE33008E5EB9D8A1EAF605F5F0C988830FDB51618D9DC751D2D3F681F1A -4247942FE023B11B8295815926BCD8972D9A14AB832D01BCE0E9CD7B3F39EAF7 -A5D8B818D4EDF1D00DD24EF93E41FC2C9935B0151073AFF30453C9453B488D2E -3164CEA20F8E53E7558FBAC9192F157BFF52055C1FD5572D0201B68290E05F1F -4C12E7EF571D8B6834A916B49191D05F679830BA557F0BE75B0B81F6017DDECB -FB9FD3668124D666EACE0D92982BF3FE60767BF43DD1BBB9DA49BF3033F0E163 -292ADF1A9C2E6984500AF8162001FA2A182818AFD57804CBF79B1354A6CD22B9 -9402CF3B52D49D52061B342DE3E053F7E87E789AAE0C6A321510793CACB37FE6 -F36D0AFB61BBD354F9FA51EB6E8A3EB87437474CB7C9A2D399A91D99C1D5C622 -4D1C461E309A6DBB534B34C29BAE2166E746C0B267E6CEE71EC9569C64C0B26A -798C8B634DF3F7CFEB08050A0DD910F7DC3B978075EB23AFB72B46D4AAB8DC97 -9F23898AFDFAEFC96AFA47BADE9AAAA580FB90625A7B0F7C7BC8472CE99767C3 -F80FB3207453742B63B36D063A6CFEA520F744AAFA016FDACB11CE7269DA07DB -7EAFD778CE065717512035C3ACC049DDE075E8724343C7720C217ABFDE9FAE77 -2395AFEC6A786BB0008015C77E2A124629103FEEF89B962D16F5A9EAA8A74D35 -CEF76CFB6FDA7F8D5A22F2D81308E90E3A51A83D18145057F70CDB171BD5DB35 -89E5AA27C97EB7C61F21753C1E21C9503660B3A1393EE734206E29F161694578 -292939A9967C6C57F9D1B406E890AAA3A3FA0E51D62D4CFDC42C6EB30B979F9D -2700AA0AB9F5BD032439DA1D7E80283ABAF1621DA6744057E5B275424B1AEEEF -7CD90A688A9FBFDF25F675B8989735FBF5A71878EF508701BAF0BDCB475FE2F7 -DC4E83B652C7472107AE84B826970DAD15889FB2FEC8C84FC4E382E5C6422EAF -5F9033A69B2D7CE47559FC0DF1C967C28A140F7C135F21E26966EE00FA23B3B4 -BC5BBE5A48DE5BE5115B7B35D5347A46287C9CABB769F7232D42BC3991DE8159 -886B89B6C193177D72850DEC1271CB4C6E4B66C8C7A238FEF6D519F2CB656B8D -3EFAD3ABC2712B4D791AA8EB182BE80D7C314EFEB596081FB473291A2836F192 -69117152F0DF4D152B97105B538260A2E8F031D63032C79880072164646A00D4 -3C4B11114B106D398F4E1118008688E28182796D63B190B9702503153B706463 -9AEE5BE245B371F1A8AE5C089DB1B219185B62460B700EC1D9E8ECED525E256B -5C340E5DC616DA271E4558A411B669C05BE555BD209E89447382EC75EF809E71 -2149DF776FCD686603D55208D81583CFE66FC21B212030029ADAD999F4A2AF5B -A69A93A0D305362BBCFB3607E06643B810B5361F7257220EEC801EE13BF568E9 -B1E43D1AF42B3AAFC1980329A1B76782D1FD1DA499510749C69E1DAE204C07FF -B6033B4217C56C3DC59C56E3A986571200344FD8A7BF7AA5921D584E34A0134F -BB3430FDE1647981B07EEBC6D6E3C0FE31BFCAE4F9D79922BD7FDAD1C947D360 -54AB08E7A3DFFF8EE646EA0C650ED778C601A42C99B1CA4820DB8E8129C6A291 -794FBC008E51A096033D21DA7E2C3BA027005CD698B910549982196E3927793F -AC1B48087C7B71DFDE6B3BEE69F4BA8B85BBCF4040BC6D390BB0C67F753CAFB8 -F9D5406FD5C6CC0B239FFAD514AE5348C3E91E864CF944A2152BC183016ABD86 -899C2854E79E37423A2A6B82D3977CE545BE8138FC338843C8E3CE90D4488A30 -61D64C3852E5B0E614C290940CB533EED07638D301D295A5A3D0A2ADC1766588 -050722D7C56875941788C5FA73DF6C15AFC82EDDF1BD7D5F74D4C8B3B2A9C26D -DFAF46E7D80AA4B75428923E8F8A0C7D76FDEBEB8B18B977169BE83F210177F1 -C48FCB3C57B166AE4881FC60D8BBFADBDBA79179E0201DA04ACCCBCF835B90D0 -49AF9BC25A34488811A0D8AC5C4CD30FC7405A7CB311980A8901DC335C100A20 -6D2F85C3F4B850E82B595D67333A4E19EBA8F8E3F7FC5AF6ABA6BE2ACE252489 -5A635F6A09080E68CEC7CE86290A1EE1917942F8215A6CFB9F325F44D8502B39 -9FE6C58494ECD32E3E24107D58F1F192D1EF6388C385550034FBF5F71CEE3508 -5E58E2FF3DF78F3D6C2DC680B4B635C0AF556CB21EE29FDB8837F4ED58F704FC -210EF15DD2C7FBFA57AF9CDD22CCF4DBB14AF0240F8B5BA407684556910D7A88 -8DB22639BDF0AE9099FC1DDDD01E887F5DD40456412EEB4DC8B92EC01C0DF4C5 -AFA824FB2B49E5D266776007C54630D725885DB2580A0E4A2EBAB48A83F50FAC -9AE8D4313D416192488B53DB7D1FC758418E6393B0A31B2EDA0B47FE639074AC -6B5A103DD65912A9F3661F7C4B1C961831D4CBE95E56281C8F6B4802E0CFA812 -5E89E8A4E801C83B1E1E671C8C29148D9E66CC733C2FA909F01D14B22B9DE54D -8D946D30B5BDA3D9D54BAC8DC0407B22E04844A426C3C4F850C6AC08969EAF88 -D57B7DFD591162A2CC3B39D3DE42F59FE1075B22C354A32CF5C18344CDB5DACC -8F34E10AED2166FFFA93413DA79837BBC312D523048AAB5AFF710EC013187F08 -16BB6B81C989215AACEEE12E8B275ADDE698B525F558C7581E953834A190072D -7F5AE1FBE21BAB680B00435BD48E127E66F0B1293E6AB6A739D313A3AACEDBAC -F9A948D8806581BE8D786EF8092FFCB0F045E6B389621A779649225A9883984D -6549CD8DF7CA2B9390BD02BA122BB88CC8E774D57003F5DB20C813B7C7682C21 -0B3A9AF46AB39C065F55CF8F5E82125BDF90AC23C65940DEF36C59140468D341 -86EC9135929C375B3A6669DBF35BBCA30FF06874C50F40F1BF6A9686AA3442D2 -60DE0B7E757D25F0C81EDE5E4CF20ADC257029D2A2973769326EBF823B814691 -4450BC52F93E8925F11580A6EBB7BB09C42DB8463D7A6B1AAC66A476F42615BA -1B6F0161CED79859435C7B685F9832E790BE2BE87C4107ABA3B09A31BA69C796 -73E0E4850865AA0D6901E8F097C50CADDDFCFDA9B846D27E82489A8385517629 -3AC365917DADC0FBEBF882651C037EE822689BC241C382DF7E899ECB140217D0 -B17F794227DFFC0ADCCB5B21CCF23218462708F69649A48C08D3E0523F0D2695 -67185082444282FD6251BFDA4D9766546CA3735AC552E7A201AE5DC2DECBECDA -039DDAEC1F6382A1C980FD579B89774357452859830FD9F1EADD31B8EA1972D9 -1A8563D85606421AD645F6AD1DA776420868FF06007E131C9965EF4CB6301902 -B3AA06AF96A0427B230C9A8239B48A3C9E67D5834B44B369BB7BA55F681D52B2 -B77532C1CFD4B5FD02569A0815EAEB358129790687BBB7883A11D88C4FCDAF2D -8CE6F48D18E81E880FDF21F48874CBEFAD71B7F75F6E3608EE10B91FB2DA2885 -C58712ED9A73B2316E0B031C69C3E13E6DF414C7923DDB181130E648A72BBBE0 -AD2F8284C5F32A0DEFF238AE3F178717296120E0CBF85F17496ED4BEA82521C5 -7201087E18DB95380D29B7D41C71AAFAED7DC7F386A059F37CFC1C5E036A6DAA -EEBA2AC35D8CB5513341BBA2F66A3A8C2DB5254D5865D2A09C28EB8866BCF77A -C6C642792C7D5B8B98494B1AB50DC7B7B73F84C0D9E689B320EB3F78802CDBF8 -1932BFC97189065795665BA7D9C0B996205BBC33E7E953A942D436A848D60C31 -AA3EC00C9259A35D46D3AD72B12BA09FA5147FAAB88BF98AC03BECC111C92338 -E5C32B051A2338E3F7124B2C2331117F0E3BD538213ADA1E2BF9C67501846F4D -CE12524A237A92475B151FDAF3FEF6EF44AF8D73DA89E4BF2F26D01497DCFD44 -28452968DA88F5EF37FF82DDE9AA2D26572702C95E300D6BCF8EE4F6FEE550AD -2069E15A8B02336C72F3DB247E756700A873C15B22D0C678FC4ABB5FBC0E7BC7 -6AEA3DEDFC6A4D67BE32F32579C000CFC858419E393A3617F495806381D9C473 -459AB0512A4765B29D7339E1068554BE5514A31C65E9CBF6B137C7B6E6230ED4 -2AD4292E54237020C0D59FEA10AE705CB0D66F8C7162C10D2BEDA905C239B633 -48B63918C848BF07B5060B93CEF98638592CA1A1F378907CB3C119C8FA9F0AEF -B232A578E97B1D219FC4A4E6B468EE9AC7302F315E8FDB75AA0DC7C5F4AF8D02 -063CB56BAA9081D337161644EFA77AADEE5B5FD0A9E23D1E6B2C993CB5D9861F -F933130EC98C4997EACB99BB0651C0A62D00E6FE21FEA867D7BDC218A83B7F0C -60707F0864651897C9A94777853989524E0F879DDBD37E0E16DA4193541C2A0E -E848337BEE596177A695FCCDCCDA2815DC916C75ED593492D47941C0066F94CA -D255773CE31976784AC8D96C42A8531B496BFFA7C004EEBEE2EEEDCE7C0D12E6 -3460E1A6A3A29C3704FDD436E4BFE9B392F4D039C5E82876196BC1C6EAB58B94 -6621BC406ACE07DC8EA0B966A7BB1152CC69C0B2C4201A3108D025229F444F04 -64D60965AC96C7BA6CAD1E384D21181D9F7C6BFE82AB2178BAB8C57146696F4A -A314E37BD9C2D30328068FDA5196284BAE10588E1762FF179714AEA6E23B983F -8D4AEC80B4244CAF00C08D799D71BB86971D21F0AE08C5D6B1547B49B07B97B3 -6329398A20DBBCD1631DEA7F1655C8772AF48E255EF1307878D648EDFDA3BDED -A449846BD016F844E54CC83A6AF4C0351CCCAE7866A5605A75F8BC4863EEAF85 -8C4D4F2EBC3E68EECDF01D149F94EA59D6DE1E23457700099320B9CADAA2F25C -1EE36EF641839E1C66BDDFA078F6C0E57531DE99D5B8FF93EFCD27BAB14821EC -144398E095677BDCE884D08B77A43C3CB84898C2F47D2BAA047C39F747A9FB2F -C2256A3D69A96E5556BB42CAB20A3479A4BDC264744C1D21D09388672F2124FC -5ED76FCD3DB8CE9E83128DDAF38EA09C5F5BE534B7E8C763818967D6774AEFFA -943F41D49E165FC6312D9A2919868F18FBDF421754807168F3D0B46D6FFD94B8 -EA4AA76745BB42783BC3D6E180E249BA2F49FA9EA93C7C803E6B60957FCE0462 -F37220D1F02C0609FC8F86B0BFCB36AB362D65FDC9E4006972F8827DDF0B74B0 -6D75CFBAFEEE0666A3E635D6BF6B82ECD59A0EC11A598ABA9C719516D40931E3 -B88807B0B97679EED2750DA89CE72490045ADAD93E2149B2F4DE824EDF4F589B -BED47D1A68FA443B43B12627213ADB4A13955941A414298369E56C9296A08948 -ED824B5AD50BFFD1278012CBD25C2900947DD36C7BA84862BFD0D6E5C8804DFE -A009520243BEF0FDE4E28A09308967AE5C17557905522070944642A61E0C3ECE -DE6F930581CEA7D90722353094AF344FFB6A9AFD77DB33F5BCC4C389EE337093 -C729A8EBE416D38592E391419773533361AA40A4A069DD2E513E01529379A770 -CF1E4B6AAA04E6859C7767A7A8DABA86A47F00504D97FE89B9EF06C2215F3CF3 -EE4C1AF567E96FBE44DCCD55C5700D7B8978B02AD4AC66D75B444BD75DDE1694 -A63B83762C0E16096803805F6D0DCA0D860854CDF5EDF0505A9188358952F936 -76CD51B7C1B080DDBE0EE98844C63F603E8A20C30B82E9FD9666127DE42A3EB1 -8B1351970E27C4ED14DFF0A3B233F5CD1B0C29F83EB364326306509EE34291C4 -42F3131380CC0CC7044B27360733FDA81FCB46CE50C78671E7805DA1168E9E1D -C0412304730716E52F48BD729E2715EC9DD491C30BFFDEBB47C8253430C3BDBD -3A943C3E39DBF1063B33BEF0C9E6B8241FCC3255F76A731CF80EB31B57439231 -4A0C689379136CAAD5E640F7A40232B08538C6EAF28C00DE6D26100D792250AE -669E7DE50FA71A511F3B9AA23DE99764999D7E04EA0B6E133CEC569E50DA13E4 -F8A6232646C3C501DCB6F11EEBF2C7027EC938ED135D3397C0EE21A2887F6D6C -D5476A118374069148C7528B8F2F755CBB26FA6632CC5E1A63CFB6E54FFD685A -0312B80D606D31B04EF73A53BE6A5389EE90A6E39A8AC664638C63DFF4454205 -2CA6F1D105D12E90D1D4022FFE7F80B7E14A300B94E31ECB6301CCB7F75AE168 -B4A38B67F5568BCEA87C4A4E39F9865FBD2325F7F1ADA633796A9853BBDE6A52 -A1427B9EB6E36F43085E5099F2955E3B26B4E3A19E888D7BF716225401C284DB -5452653EDF68D540DE39065356267288D831AFF2507DB7F0 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMSY10 -%!PS-AdobeFont-1.1: CMSY10 1.0 -%%CreationDate: 1991 Aug 15 07:20:57 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSY10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.035 def -/isFixedPitch false def -end readonly def -/FontName /CMSY10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 13 /circlecopyrt put -dup 15 /bullet put -readonly def -/FontBBox{-29 -960 1116 775}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052F09F9C8ADE9D907C058B87E9B6964 -7D53359E51216774A4EAA1E2B58EC3176BD1184A633B951372B4198D4E8C5EF4 -A213ACB58AA0A658908035BF2ED8531779838A960DFE2B27EA49C37156989C85 -E21B3ABF72E39A89232CD9F4237FC80C9E64E8425AA3BEF7DED60B122A52922A -221A37D9A807DD01161779DDE7D31FF2B87F97C73D63EECDDA4C49501773468A -27D1663E0B62F461F6E40A5D6676D1D12B51E641C1D4E8E2771864FC104F8CBF -5B78EC1D88228725F1C453A678F58A7E1B7BD7CA700717D288EB8DA1F57C4F09 -0ABF1D42C5DDD0C384C7E22F8F8047BE1D4C1CC8E33368FB1AC82B4E96146730 -DE3302B2E6B819CB6AE455B1AF3187FFE8071AA57EF8A6616B9CB7941D44EC7A -71A7BB3DF755178D7D2E4BB69859EFA4BBC30BD6BB1531133FD4D9438FF99F09 -4ECC068A324D75B5F696B8688EEB2F17E5ED34CCD6D047A4E3806D000C199D7C -515DB70A8D4F6146FE068DC1E5DE8BC57036431151EC603C8BCFE359BBD953AD -5F3D998D8365AF76D4CF6A06FB66E1CBCFDB3A67D8880377CD677B9705EE853A -D849F88A828E244FA5816B7D081D4D1975A56D771790C21AE05809BEE6613452 -953F26C39CE61F0E134BC35404FE2F0B7D244D9A6F66E4D817D1C65024013AD3 -5F242EDE94633B8E20EA42B07F83BA649F12B784B2AAFA542BC597C6C2C9AE9C -39D60FBA6CD16AADB5DFDABF22F37E244DF3987FBFA55031CFCD46ADF03650CE -D6CDFFD87BF7407FFB63F3FE4C29FE753896101B2CEAB9007B66E29D6A5B85D3 -FF91F888E445677157A5996FC7A3BD19BAF3A3BCF33F0719B992A0F013B1F0A1 -82E42DF6F651071FB407F448DFF37653E2A0569BDD8EABC3280B3582745DB98B -644E5B341F531B0D81ED85F815B993C2B8B34CDDC6AE97606F6B3B1C5427F174 -362FAB82B935087B568E6F526347058C406E878F1CC2DD05C26D35565347C5A5 -7575891BB4 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -%%BeginFont: CMR10 -%!PS-AdobeFont-1.1: CMR10 1.00B -%%CreationDate: 1992 Feb 19 19:54:52 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00B) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMR10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /CMR10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 11 /ff put -dup 12 /fi put -dup 13 /fl put -dup 14 /ffi put -dup 34 /quotedblright put -dup 35 /numbersign put -dup 36 /dollar put -dup 38 /ampersand put -dup 39 /quoteright put -dup 40 /parenleft put -dup 41 /parenright put -dup 42 /asterisk put -dup 44 /comma put -dup 45 /hyphen put -dup 46 /period put -dup 47 /slash put -dup 48 /zero put -dup 49 /one put -dup 50 /two put -dup 51 /three put -dup 52 /four put -dup 53 /five put -dup 54 /six put -dup 55 /seven put -dup 56 /eight put -dup 57 /nine put -dup 58 /colon put -dup 59 /semicolon put -dup 61 /equal put -dup 65 /A put -dup 66 /B put -dup 67 /C put -dup 68 /D put -dup 69 /E put -dup 70 /F put -dup 71 /G put -dup 72 /H put -dup 73 /I put -dup 74 /J put -dup 75 /K put -dup 76 /L put -dup 77 /M put -dup 78 /N put -dup 79 /O put -dup 80 /P put -dup 81 /Q put -dup 82 /R put -dup 83 /S put -dup 84 /T put -dup 85 /U put -dup 86 /V put -dup 87 /W put -dup 88 /X put -dup 89 /Y put -dup 91 /bracketleft put -dup 92 /quotedblleft put -dup 93 /bracketright put -dup 96 /quoteleft put -dup 97 /a put -dup 98 /b put -dup 99 /c put -dup 100 /d put -dup 101 /e put -dup 102 /f put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 106 /j put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 111 /o put -dup 112 /p put -dup 113 /q put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 117 /u put -dup 118 /v put -dup 119 /w put -dup 120 /x put -dup 121 /y put -dup 122 /z put -dup 123 /endash put -dup 124 /emdash put -readonly def -/FontBBox{-251 -250 1009 969}readonly def -currentdict end -currentfile eexec -D9D66F633B846A97B686A97E45A3D0AA052A014267B7904EB3C0D3BD0B83D891 -016CA6CA4B712ADEB258FAAB9A130EE605E61F77FC1B738ABC7C51CD46EF8171 -9098D5FEE67660E69A7AB91B58F29A4D79E57022F783EB0FBBB6D4F4EC35014F -D2DECBA99459A4C59DF0C6EBA150284454E707DC2100C15B76B4C19B84363758 -469A6C558785B226332152109871A9883487DD7710949204DDCF837E6A8708B8 -2BDBF16FBC7512FAA308A093FE5CF7158F1163BC1F3352E22A1452E73FECA8A4 -87100FB1FFC4C8AF409B2067537220E605DA0852CA49839E1386AF9D7A1A455F -D1F017CE45884D76EF2CB9BC5821FD25365DDEA6E45F332B5F68A44AD8A530F0 -92A36FAC8D27F9087AFEEA2096F839A2BC4B937F24E080EF7C0F9374A18D565C -295A05210DB96A23175AC59A9BD0147A310EF49C551A417E0A22703F94FF7B75 -409A5D417DA6730A69E310FA6A4229FC7E4F620B0FC4C63C50E99E179EB51E4C -4BC45217722F1E8E40F1E1428E792EAFE05C5A50D38C52114DFCD24D54027CBF -2512DD116F0463DE4052A7AD53B641A27E81E481947884CE35661B49153FA19E -0A2A860C7B61558671303DE6AE06A80E4E450E17067676E6BBB42A9A24ACBC3E -B0CA7B7A3BFEA84FED39CCFB6D545BB2BCC49E5E16976407AB9D94556CD4F008 -24EF579B6800B6DC3AAF840B3FC6822872368E3B4274DD06CA36AF8F6346C11B -43C772CC242F3B212C4BD7018D71A1A74C9A94ED0093A5FB6557F4E0751047AF -D72098ECA301B8AE68110F983796E581F106144951DF5B750432A230FDA3B575 -5A38B5E7972AABC12306A01A99FCF8189D71B8DBF49550BAEA9CF1B97CBFC7CC -96498ECC938B1A1710B670657DE923A659DB8757147B140A48067328E7E3F9C3 -7D1888B284904301450CE0BC15EEEA00E48CCD6388F3FC3BEFD8D9C400015B65 -0F2F536D035626B1FF0A69D732C7A1836D635C30C06BED4327737029E5BA5830 -B9E88A4024C3326AD2F34F47B54739B48825AD6699F7D117EA4C4AEC4440BF6D -AA0099DEFD326235965C63647921828BF269ECC87A2B1C8CAD6C78B6E561B007 -97BE2BC7CA32B4534075F6491BE959D1F635463E71679E527F4F456F774B2AF8 -FEF3D8C63B2F8B99FE0F73BA44B3CF15A613471EA3C7A1CD783D3EB41F4ACEE5 -20759B6A4C4466E2D80EF7C7866BAD06E5DF0434D2C607FC82C9EBD4D8902EE4 -0A7617C3AEACCB7CCE00319D0677AA6DB7E0250B51908F966977BD8C8D07FDBD -F4D058444E7D7D91788DEA997CBE0545902E67194B7BA3CD0BF454FCA60B9A20 -3E6BB526D2D5B5321EE18DD2A0B15E53BCB8E3E01067B30ED2DD2CB9B06D3122 -A737435305D42DE9C6B614926BFD44DF10D14402EBEDFF0B144B1C9BD22D7379 -5262FEEAFE31C8A721C2D46AA00C10681BA9970D09F1EA4FA77428025D4059BA -2988AC2E3D7246BAAAFB89745F0E38580546045527C8779A254DB08DCC6FB9B9 -0E172209FBE3857AF495A7F2B34BC893D942C145C2204CFCD6A5C69FEFC25B60 -E412CB2BEAE7F7FAD03AF46344F6A7D483BBB1E896BF16B0F4C363799DF23CE2 -E8127996DE841B6F9D8A9E56BD799B6A938582988AF87151BB8D3AEA85C49857 -DD862B5E10D9F33D57795D656FB616BC9B8397B3612131A2B0F472656700958F -739A548F7C3A348698AF9F6F9821D7A9FD4131781ACBF7EAB885A3AC254DBF94 -02FA697941A0F97F048861788BEACC20DE829764413CA58F9D045A6B38BCD6E6 -E4827247EDF1171F64E3B041A69B244308DC07F66643FCD7D5FD37F36EC4CB5F -957D4ADAF91850A3B1A765E0E580EDC77556593D1B2E1C22685268469298688A -45C474C9D0472D019CE1E83F25182D084AD85A49C502E8D679C227DA8E32045F -8055D1622C478F8FDA342685F858DE3F53F1CEA0D70BF3FE09037D981E9E7FFB -BC3F896535D0DCF53F4C85A1DA5D0B632484D1F25460E3EB38E251D2AA17817E -F3B25A2A49C0AEDE0B89E277F52CBF744EF0243C409FD71FB0C574640CF11599 -117A4F42F27D8D282D34485AD116F7E753A8DEBFDF7C552A1179C02B7A37782B -743D0DF85C15A333BE9EE82C13DBC9CB007DEB5900954AD9309902E08B3D5BB4 -E8414211B971CE8B9F05A61C15F400D9297745F606C6419E8A8A9ADCBDC39243 -617EFABFDCF9F836D14411BD72EE19D0BDE89234BF7D52E7A68ECC952FB74FE3 -33E1A87DA39AEEE9E90406E2B1CF3799C63E9BA858D54F38918B814C0DF0B696 -839C820C26FB473ACC5C08E2056457A74123A398806EECDB427BB183F5458105 -2B66D7E1FC3529025D3243A045625E9DD9417FA089B3C7C394D2B65C0367FF73 -79F17ADEC6B5D27A5D3D3E244A0839E38267ACF07B2D994C2B4E7F30A416EEE2 -D1688F167D1641A72A795B1F4DA3350F75AD6D546AA118B5F8A5085F5794E6E5 -28256CD31D250D8328C9620B8ACAB03E4A33DB4595E959F4D0FB1C8CE85A710E -22F1940067C036A7DCED7EA48F1EB81AC4735FB26A249A32AC2E3E7636B32D31 -7D76FBEBA106D6C67C94A3BD4256B786B71C6EF8D191CA90CAD8D2EEAD42C6DD -8BB4BEA7DAD4ECB6E002F3B71C2955A5A401E34D55F755BED68178C270109BAB -FA0AD848347EB977325530B27180661A59447D7DB55A62D65309DE24B6638986 -1D3A539BD37E74C2C00DFED3336B5C6B28D915AB7188FFBCE3ADB3CB903944DF -1BA5923A1C053D4682BB8616F44E81E18DB2B58298F4B1A6289CA993DF3E7C73 -B00DEA3A9B747FEEBC4A11E5B9B8B05CA2709B8AA935A42159D3DE399544F5AF -AC1CC00F6CB94AB69856078C9A2EB2046BB9055CDD6A0622112F7D3710143F1C -20CD8DAB4109CD47BC00EBCB88314081C1D6C43132412F261CE0262FA28DB7A3 -C7D8534BCBE1A60488EA230DC558B73C72AE87539A9D7E28C2BE05FC05F58DDD -87117FB7D26E271EE319A45AF58B5060BC504767962151AA0BE18386D7A6B067 -DB4EE68115AAD6C430A83684A650CAE13BDD3B2273062E649AF34CFB7A1E33CC -4459B32357BCF9E9D240B4B49480E19266F35591878434DAA5C22547994C95C4 -24836FB59B23DB98769E02DA06763496C34278BB44E9ADB6B0A4F6F25513491A -5DEF85F52B2AEB160684F2FD877B1C0C20AB9CA213CEFA13DF43E8430DC07E84 -AEA51089F7DB2D5A2DD2B41A09C6DC4C0E94DD1A1F9B5D4B948AEBB424958B80 -F1CF7424B30C9459FCBF8ADFEE2DA11544583C2A6D44EE145C1848C52E01EE0C -7AFC55A87FB3A81657D41098685A17A181D0CBC519C1579B64E8AA9A56665016 -221DD4F776B39E4B1C7A6E06E92EF8586B9BC24692F3F850EC07CAF38D46F388 -07B36DDAEE4EDEBDA728B444B69CC8C86E8A316338EC254E0D39527A6BA0101B -DC4A7C0C6B3A57325B671E16E7D565FE32AEC8F12DDAEABC4C0F5B81ADC4FBFB -3058680581EF6A59BBB791A36D25CFFC73832385B74AA2909E2532E12C17416B -9C753552C5CA9F257B49FA4DC9E18DBA9E74AACC73891AFA4EE5AE5270A49AA1 -F21534BEB46230E1443B2CC1BBD7C8A53A4F81A94917F2C8033B81B3A5147009 -6FDFBE24DDBA427A8710558A3FA56FC095CF43965471C12B7E0317A055181D51 -613B637F6DC09665B21627566D893D99E8FE05DB46054A99E9BD96C905457807 -040B91EA8AB82DC2B238DF8299DB9D96AC80C58EC470E44AB57563C69ED0766F -4D7897A49CFF983CF4210633F5556ED3EC9269C69036DECB0D3F95D70C4160E3 -CC03EBB3EED2BC58FF82A1441ED504DD64141BFB1D9577D697123FFDDEAA86DD -122B65104DBA6FA94273E11F847C3F6AAFB171F13C6A9CC35490A7059FA99C53 -EB841EECE3E2FC7293601E799851ABB94E61D5F9E19577B5C5D53FF307739FB5 -8AD96F4C982FBB42AAFEB06FB5B985CF3B5A94D347795D9BE05F0A2DB35DA51B -6C6EE6F81B9A14A470FB8EE86DF5D17C4749F9C64F40AD82CE6F5DC2A0E61355 -FC3845139194F4F5009E8299E9FFF9EC7D12FD49E423874D41FA8737009E610B -8ED0B8F4DA3D512635ACB23828E19A26307B7A2D3EF8345B5D8121DB386D8976 -AE7D6792C02EBD15EFBB17B514D4258A2981D64A800AAD53BF194F5167DEB3DA -764499D825A23BDC6565EBD942063347874C34413B02569C71D90B785ED3F7A3 -BA9987350892CCB89A75A77A4CFD7DD6383E14CAD21FC4F7A73FF4271E57EFB3 -A0F543FD467E29B02115D124F47DCB3C02817123B4EE694B9AA846F7CA86F432 -03B64474879A2D94708721A0CC8FA8693A72CE3EE4AC1F4D6A47C5EC92BBC1D9 -A0015887829A47250A0B9B19ED203DA3231C66BE6056EC2495BE6DB3E8EFBC6D -D47ADE79FC302ED199F8FA1385747D3652F5E3C3A311D4D6FF082953B3188EB7 -C7D3FE68B51DF57AC4697449E539FB149BF6797E0B14DB1BE89D97B0B93BFDED -622694A35DEA11D8ADB4F117D9351F73BE0AADC51282F4DD00158D0DF10A307C -6D20394A15C86CBA42B818F6A68A89ABE13A14CA4DFA4BCA19DEAC249F83CBBF -7AB2074FE43424EA9E92BBDFDC3EE2CC7A8F3666D0D30452409D8DB80AD1EBDB -A12846FCD4226A6B357AE6BEF384A58E2FAE1C79D43D5E474E0EA2FF1D833899 -6C386610786C056C54C826F99585E7296C4CDBC846AC36D94EEBBC0DEE84FFAD -210AC51E2EF34126098AE612DEECF8EC4533EBFF700F9B75BACEA7B771CB397C -6413830C7DB0E333151B30D32627FCEF266E170A4D4E9D71883DF60C4FF03D08 -8EE3EFC8FCF74EA015E7EDE94C5E9906A3AAED85DC255CDA01D9063B124EA9D9 -54F2FDDB8E05829C8FEE07C6C027732D717A9515B3417BF705870EE6364DD785 -A3203480FB548EE57AED6B3739B3F1C6C2CD68BD1A0A052E373C81D661753994 -7C751E6F15E7EE2C075F1C43DBED60E8FF8D7581EB2D2112F62F15A3C6893026 -6651E3AF5E655AB85C63F34360C4820D327F6CE24D5BF665355035972DA992E5 -3BDE376CE6155BF5C3BC0C05ECE69D824061D2BB29CE02307B6100BB8EFF7ACB -87659656E6C175E8D064D4B9EFF87EA45E42CE881484809FF86A0DB01E783090 -81B04CAEB3D27B34ABEE1FF55F6E3BAD0F9D47DC8E2DD2D75599C17C187D3E9E -3F0B2D57D03F42EBC7FEAC40D62DD2545A297F7CD1C2D3C28BEAB8F069937A60 -76AEFA5B77BCEB2AC85F000E046F4D9B009688CA306970EF923E9BDC60E4E9A3 -628AB4D1E0D643D1A0A18375000ED121B460ECDF65B191E43182FC69B62BB2AC -991320BC421EFC03419AD216AAF307ED3A2222A923E57A43A13F18199D5A2393 -2C2779A6EFF51DB8A696EAB9E648CBDCF606654BBB7DC9CF5E05D64EC7433A2B -23C713A4AAEE6044DF5231C866CB126CC8D179EBE944872FE00E5647FAEBDD31 -069C5BEB6DA336A45583C87856C0D8409D8A02A58F0C16D712665667CFAD187A -DBD8CC8AD1962DD6494B792FCB6A410BDAAA2E1B9C8EA0B57316C15D17EEB68C -080A43C5B803A58565E93F3BB30832496055E861F6503AAFF4B48BEEA5657992 -AA29F49F6E89AF9C7A16BA8F271E09CB0260922A3D706CA4E55946FF3DA900FF -A8EABC97426188ABF8BFC2D85224F9D0BCA5038EDE33BC6EA20B1BC2C5B1A683 -A5AF575CE5EA826EF7D777F1824AEF9A456D8A1857E79CB21E75C1877CF7A0CA -4E3E1943BE4F614CF9F8D422CE8BC3744A09A12BF2F0E0B9EA8412ABAB1050B5 -E5F423F3974EB0F2C323A9D5942BF0B52217B616A178B51DE68ECCDDF3D852BC -3CED3FC00C8358BBD9621DF38709A7BC7CA7F507CAFAECD058416622C8A6778E -56DD0F56D087DA40E09429600FC97DD913C31491AFC81CFDD915D2D3BF3811A0 -8FCAA9F7B9A1E800E4E3CAF640898FF358B3B3AFBF09594DE760D03B2B21EE6B -38EC7B48A4EC277FA6E52434D9FEFC5C90CF038E7F8297592057CB484B697E14 -145D80B40B9FE18D453AE12272B4165DA8ACCF5D8161303CF8AC0C67EFEE09CF -61EC2BB71FB74AE4936C20AD50F006D7818A1B5F6546385280062D5FE1BD3B92 -AA7B6D60AB4000F75D7ECA2BC27090B34D313AF755BD6E8D2670929ED5D9A7B3 -ABBB2130AC0AAA0552FBFEE360F0491964A823B54AC07DB43D526B1646F70C08 -C9B143A0092EFC0C680E42BE0C7104CC23ED2103678AB9805BE6AB0501010416 -22CA00A41D88E36048B3C871A917D8311B88031931DCD15F687AF5380CB73CFA -933F9682D8D616DBCB68CA9E1FC7DB0CA94EB42E40673597589E4AFCF1313C67 -D0B6B2A380D4CA41AA89417B19E5B4BC2060CEEF5676B49000D717250D796359 -CECDF88AAF08B71AF8859BEE17A9BFD57998A6C66419232E7973F01E3E8A3B3B -C4160A1F51D1AB8D21B32F8DAAC9653077F752CB0B141589F171B312ECCE4AA2 -A1ACE97D0825DAB81A577613EE062BBB62B3D75E3D045E8B0155D2A9325F6AC5 -29DEE4C20A015E03DE5B60DBE04E2BA16228F6EAE52913AEB4570044C0E817B6 -ADDD0596149BC6C429F46FDFB0EAC6FB4A1CF298495B59C8A70C2B9D240C6F20 -93B94A632BC46C7C2755CD234DCE75562990C0258C2D615DD8CD4092D10B0FA8 -A7697647846DD95794C141A571BD27295A6498BC8BD6B2ACBBA73D6239B677DE -0701EC5B5994FD981017F5B314CED6070CABC53356880C6CEE6DA1C519198B7C -D390CCCFD01B089375003D055B3D704D3F67CE6150BF41ED2CF7CD4701230728 -7F89E00C87705C76B3CE3CD1C3929EAB6000E193D01E9C7264BF29030E9EB051 -FBB094633BB51629DD1DB40CC5F3FFA9A70093E59704C129FE895152BD6C5BEB -66E46DE52CE673316344555B00BA09F7B60455C10548EBBBF13D1FD485585A36 -00061D31B7DA74AEC16AB236780E004D8602B29120854C950F29FF6F15A4F853 -83A553319C5D2DE26011722C90563043AF87E0B851FD47C01E30A6E73546E0B5 -822A1C591AAAD550429CC1143584B3E827C0138A6AC5D24D3142459A996AF5CE -8177F93ECEDB4661107DCC38BA9815D7DB51E35E7D9BFA11AA6D4FFCBC95DE64 -1A563634B42202994844A9D1D6CDCFC0439BCE6B058D8E902A279DCB44F36DCA -186C5C15434D987ADE64331BAE39CC537D826F9803B7E9461E7415B66327602A -83E73050816AD4B284B7F38D506A8C8F3931CF92B7774D3D4AAFCE1B5D2DED59 -E15CBC2D7CFCFE79664AAD7B4A005A0313403EF78DB7543DFDB0077C146E056B -FCF76BE09EAAE4CE8C4C5F6B9A400574C3E02BEED4C40BD49BFB2C640042E6DC -5B6CB5D793E27453B4ECC044D9232C3901DFE56A5BDC07FB95E6B19E431A8728 -6E2FE837973B10CD1A207D5F52DF1CFFCFECE436B4753E4120B6075B43DA9F43 -3D09EE27ADBB9E3461489F3F8AB70D85EA3D551521E208421390EE9B97F6C7D1 -FDA6A6B9BDD9C7FA025FB6EC31CAB096D467BC25F07BC0B9F064E8A02DBE0411 -233C350BEF9874B22C783B8290A6878D7475F6905AFCC9B20DF5D9453449B90D -106805613B924CCB40CC607140C1D8CB4C66143DA11EFF15ED437B23FEB505B9 -62F3502C4CC0D8F2AA7E595C05BA4647CBFDE86238A9AE6F4AE3E616EE8EB11A -2E57F499C5BFE242D1F4EF7E6AF94EAFA6F029D78572FA857883410BD42FE17D -53FFF9CFA96544326F5CCE7A29379B231734F06CBE7921F42158FBE5D7D650D9 -618D4701FEBA560CA102DF29E9595B0871585CC8D810341987537EBCD0C003E8 -AAA0FFBBE730247E15DFE53E820EAB442E042A180E41B1AC45C3D35310049E96 -6619E36CC21AF0F69D6C0A11466FF49DFC0C5F30C5118CD95A8A36888C822676 -128015D05C755FA399CCBDD108FACF02CA2D66EAF830FC2D8A4413A18416C52D -B87F9E91317BC5B1B50E8E67ABE67AE5F20B16364B0754B682BF918A9E8262A8 -25D1DBFD6597DC5B635A73395A20F310AD55D47059931ADBA6BE34BFC0183F51 -54B4A1E638D954589D823F65215D79264626E3A935DDD6F0F5070C2301F0CBA8 -7B51DA5CC2CE2993F68AB04A7C83155A4FDA32EB7B02475C2E0DBFBF65086E12 -26C5AB818E7108D6E275C226C5BA55D9BD89107BB73E4F3302AEA534C67274C4 -5AD6DDE7D1348799803AC6428F514688408069A6EE0DB338C422EE68A21D7CBF -A5AD9AA7934C7C06639064B0257A80447BF9433A7BC0122002E45CF9F2032415 -58191AF9038449A4B780701834D1D93C4BF49AD18A2296BC2B4E43B425D34933 -110C63C8442A989B08ED916A97EFCB6B4363DD66240359C4E961BDABB9EF406F -50B5E99461D5C8E133BF7AF81474AB31F8140B803B99370FF3081D80022837D4 -D3A3706E9B0B3972A81E4D2E7139E255AF691F6A4678D01DF3BD2A32693A588B -44E3B60BB102DE737CC83D432FD76260355366E09A7850C4F269101EED46630C -BD80499059F066A2BE0F3C83B0D8E0A7D6440A9F79291FBC4C218C57A3B6A487 -EC56CAFC64A6E517E2C4D3267CAE196248E6051FFB2824552D0FCF656A2BBA49 -8E8DFF9B3227D820CF942FDC5722A7BA220D0029C28465666B99132D551FE278 -C93D4E92FD003903CBEDE56E64D7DA481297409E5B63423D0FDA65431E6A59B6 -5ABC9EA077F0F08F26C3AECBF7D5F51317C4D8EFF5EE1CD6664DCE57022F2965 -8D3520633288A0442533C847915E969FE7808B485003FF34B3F29850F037A930 -583DE61E0C92E56EDF3F08227146C48545EAAA72975FE80C405D98E1634953C4 -8469D25036B107F3E2FAB78EFAC01F1A7C266BCFF7D4AD006FC21ECCA80A1F44 -8396C4DEEA7F14F7C051B24A76F0027B8AC80956CCDB9D86907BC6299484F168 -C20BAAF6D131C506AD51FB477118BE491E72283697DC88DFB1E5225329F3E7CF -F0C061C3C8433C8B39B81BEA0396DC7A0CC0A9DCBFDB7E634CAD538AE4CAA055 -88E63B4D4CC99355DE2DAE6555BE3B4C633709751EE1053C35D59882B3F3E559 -0FB569FD4DBCAE28B2B415B444BA6746C0968ACE6CDBAC2A81205B0D7329026B -E8F1133A3C02CCBC4772A8700CEFE0F4FF6FE5D95B6CE6329819F4370F3461AE -F6CD85F4F903FB220987A51696D3C141ACFB90BE00C2A9263F42DA4AC7128E8C -B4960BD94617A0BE1E9EE443E625C3A19F6988A52889424F52F10259CD191ACA -DC0863C3F38A85EF445482DBCFF9BAD900E86A37F82B64C48D5C8B7EA961C476 -EF43151EC824376C450610CE2A3074FB84EA257E52E8CC690527833B70B08150 -DA3907DBC1645613B9F02C9E97AA3E46552528AA8138A9DD54CCED001FF3A0B1 -248C62BB75B842F56B7D402A00FBEC7B3660E1B85BD2B2149545FF83697EC13C -0FB36D733FADC3AACA584E110B4C97B34D29E9F62A69BDDF8663DCFDCD7DD89C -9FE559BA7EB195E27177B9E6FC4A5EE4E707749A0DCF391448D2B83EE91FD91D -EDC44C2013C9444399BC2A49077AE821BC0A51494638B7307F4ED02A0B93F685 -765A2CE63373C2ED943BA0B92AC29F589A34391879D513D318E659192EB96800 -F70C097613825CC6F0A83BACB6128603D5D1DF74F83FBA4C55CBF4ED0251796B -8034371CE0DF07D49AD6435D048C2B11F29B8F7D3D259566103E645592CE6185 -9532BF90BAC105F042466043D52D8E323E1C241BC7D2337F3E420153DAC45279 -902F35C33773C30327F7B1D5EBD92F4C6DC2002905DC00B9A60BF55491829C6E -0A8D4B4BD39948DFE749E2CD13665E5DC253DA2DA9878B8C88AEF1CF492E6726 -0D7DCD188C5E8190F41AF40C81057C88A55466667296314A5A5C42C012306071 -15157E2EAA6A731AC77CFBC990F1193CDB767480CB4DC849B723E873AD0B888F -4AC0D820357E1C5DBB0477045D972FB10F0053B967D6A5BB70699D5199BB9240 -4F69F592E637B26F23956C4FF9F0E18FD7D55BFE558F3E1D274845DA4F3F5F51 -6943DB48B2B5CF2987B0C11A76E1976F36FC46C6F2E8BD831104722D5E5BE602 -85979C654683172CF19B202C13F2D4DA2E0B6393CF9CCF0695A457E71EF6E697 -2607BEF44DEF2F2EC35A060C70C2C1021AF5F989B8296AD4A173EC092C49BEC7 -D60512EBAEBCD4D508B476694F13E338B574935626BE65D0B7388268DA6C569A -571BADFA2F3A36A0F885689C98A6972397978A146725C8B4936A4CC9A78FBE66 -29208AF22F8A37942A24CD96C3D4C7E41882B73A874CFE293CC8189CDEE9086B -94938576622FF3C92E42578037FDF6219768F3D4B3656E15C9829883BCF7C174 -D30D8D4C747FC1007B4280863DE13EFBC8F3381765AE9615551B9DF4F7506EE7 -058B18333AE4E956802D68C3F9BC72849912D2E167EC3FFAA0E8B9B61D29099E -C735FCB73FDD8C73FEE70D45C266EB87F8D6A2D37E79EE369D111F18852836DD -4287CD0DC39A1B8A4E4790D0C3E1CCB2148E52E53FAA3A59953544BCFB083959 -42526D744C7C4B6677779AF5B5E23FED05C286F311225365A87875586E4E54C7 -F8AD27A09D5BF5D7FD077B4034CA24C10E082F6A2E5FBCDAC348655DCE737592 -80BDA2B6BC4C38F81F6C5DC8CD5F01AA169CA580C78B60B1B2B7AF314FF226B1 -C9F8179B629259602454ADB36F176A188C667C5146795986CE173FFFB1081C57 -75664ECFB354A62A590DA0FBF09EDA7FA3B6D1140A9A67EAD3D73DA028C19C7B -399AEED3CDDCD7C4419F4B64256190CF73B681C25B59323A1644E2FA58957599 -56478F8824957BE1A74F6687EAEA3530D45F09C2B8E2DE6EE6379154D02FBECB -99EFCC22A17009272C905E0C3B8E9011A7398FEEDE844591189BCEC4C1142738 -BB8AB10879E20AFF186844C9CAEADAE55D9493608AE7102143535521968B699A -14D9BCCED59CDD95CC786B3939CC6CCECDA720102533C05C18E159C18921C8C4 -05FC5F150FEF9EDF4D15CBED48DAE8822CF9BE839AA4CF75C62D45BE75AF800B -83C277AF3CFC6A4B99C7978F942579F27258A42A503D970BD6BCB84FE984EA53 -2DFF57F083D6B339AC6B87DD15D50CBD6120330BF5D6926BB15365F494CC8E2E -563B1FD178B9970DB6A2776E1993C787F8C10CFCF177566FDA26B32EF7D2A200 -F010F38C6B91A23FA6B1F96237C23F8F3436460792768F9E1A4BC232907F8583 -85A6A25FBC0768ACE15F2E116972224AF1836C3F543035786589A473C3D76E18 -70D2B01CEA0B390F0FAFCC543340E57163B9A8AB387B258289F260997DC22AD9 -9540088A6CEA5ED000950781F5F6389AB4BE7C6A8813BDAFE941056A7E083C47 -8AC4C0E8EB9DD42AD319F846B633E176769878AED838F0E9856C954B341D8A69 -63D6259E5C0B0E3B45066F57CE561CB24FCDB31ED2D84CE5EDA8FCABBDDF9DCE -F4294C7D7FAC96519FD6BCFB938E327A231F8EB522052D0CC707067F7C71FD17 -822C1EC08784C04649108D75EA9289E6A5D7083663F44DA57FA48F72208D58ED -B7817DF355FC52D7AF73DD0E06A2EE22EEA87A54FB92B3CB944733CFF5BC3FAF -8E70909D392177C9BE87F4ABAF30F184E51F44442134599958FAB1E7C3C2A1EE -A409BDEA1D48245C536639DA7F4D5D14F6485032070079F5A17C15C10599BAB4 -351E6EB7AB2147410D850BCAE443F2D8CE8F1122BC7B85B5A8C4893350381609 -9E2C0231E38FCAEBA2053756659D0AFEC1950DE731623281CF5D65ACF2BE8F68 -825D65A5714F26F24B588C48CF7B671D1720BF291A2605E9F7C7BC0C99C42098 -1813545D6AB190F3772CD1B7BF879F2D7FC1567EFE7D797CF7EAC1B82B693323 -B4D4CF2FF6F0EFAAC99A0C994438806413FD29766AE223940DDB26B1544D7D05 -A36E7202F2163F93E6F90E7BB0122A953A06480F44A5D281A703DA043AC524A9 -22DD04205F96750A1B64CDD7E046461E42A392D651F7FD7846D359E91354508F -0779BF12AC1C41054E3896CB116E67F503061B38CDD987E8D29095A943506184 -F4B30302905F10A7491F4A9F4A35E0B30FA89693114CCB61DDC7E71E6BABCCBE -AAD2FF8AD99D9029C205606FA41324B98414B5C797B8F431F31F50C68E224ECA -5F2C70779CBCFFF6548928CB638697845A2EDE4B64BEC8063CB30E04AC983DDB -1186CD7B88B2E37AA33493C1745F2932C0FC3E52E2D8F8DFB8187B0AEA11DB05 -74AF52E6ACCE06CC069ED62E4918623608AD5B68F0B82901CC6DEF80653535E8 -B73B0ACF9355A710BC55D945A5161A68EE0FD265BD0DFFC6276932507902F923 -6220C3A5C467EE1913B81204102515C90B375332C1583CB976FF9829004FA63A -65F97D2A873B5ED0CB78F3C43D3B9BFA7A309F26530F71237BA2850405A30CD8 -224D4BA64880BB8676E41C6F9DC03BD7C5D1D12AD80F9C91F5ABC60D1BB1C24C -EA4DCFA355BB75BFDC5079025F9AA783F346826594DC7502E816024730435C6C -8BFE5CA1B52F56A3309593879A1BBFE764044A0AE0043B65AA05BF42CC8693DB -A9FC848E9BB33D1FCF56BB01C68B3643A761351D048990F18B26039A5CF7E170 -BB5EB48AD76A9244F3D217039BCDBBC94A2C55B5170406D3ACB2072EC05199B0 -9A83728ACA69390C7FBBB3D51F51ABA05E0A2C3DB089EC8B3158C9EA036E2202 -B6A744EAD50EDFD5140BFCEC3A83F858E5167D99D692882175F396DDA828D198 -0ECE9559D54F3EA1BB55632941A22D04AF8B48C1357EAF891526AB55CD428637 -5FA1C3FE913AA9A3D638D44874CDD0BE614971D841F80F4E3D39C2003737B9A4 -5433FE9116B892B90DE2ED7F20FC4E37167E535974DDA396779D0DC00B50465B -FEA6569E6826B258904F7F197E7781BF1479E39D6821EDB69F23733058F29A8D -C384ABC7B82975FF67F193800AFB7DFD8D87FC587CD924D976788A3A36A273D3 -618029D11E9D78B299A8D8D125F0B3E47B53D8BF2E21A9C1A8AF80BBC0D2F1C0 -70F9FDE4EF23481255015F393416BC4482DE3E42EB0B6AA6383FB3CF99E27DFA -3117798E6360680C83B4676C3811677E233EFEFF9E2969819C11F26CCDCA8786 -AC0AD9FF7FE358443D90A3198688614D2588594E48D5CD09FCEE5C4F4457470B -7F92DBDB3F042313AA8E47AA6FB63F2363F88103D7FE34BD4A6BAA07B14E63C0 -12471954CEACB0CF176275C6FBC6A4ADF857C2F51F6D0D2DE2C02E03EBCFAE3B -D8005D76954B140D067909E5CC0B2E4FBB23B8BD9AEB44DB233A28B45B031346 -E16F97552647FFAFEDB3A1A6EA3E64D27F8DFA9EB8B58D47D8B12AE4E5E29DA2 -898CC843DB8E7A909810C33E2AD1697423DAB1994B22FAD8DEF79121CF130D28 -E1700AA8357B1082E352A0A68244F663A0A9F37C47A90BA197CFE9FF7EF0CE60 -4D68434FBD743D877FD1D65CB33604754BCB1CB9E8FD760B3A0A506DEB55C186 -EE41E005F8BC980F83BEFDDA40CD0C88881D21A786434D1DBFBB407E1D081256 -0F37489E075C495840746627A1F0F77E7696DC850B3E3F54B3D2ECD09A35761A -ABD9C648EEA41F399B8CA49469759667F1E2BBDFD1DFEB252AE7BF0C088CAFA4 -4FFAE41CC8916D70BF5DDD90A59D8B2AEA048832B0721BFDA97333D29C7B0276 -D4366A7C06F05932963443A78187574325BE8F86748AE61923710860EC7DD014 -22EFAA051AB129A6B8BBB38F528F3D21189A273022B43EC0086F09CC32C738B4 -2A3E846ED36696737CAD442A3FA8B9A7441E3803DB48B24E72C8B6F5E7092771 -739C234900D4C81C57F57C51DE7D38BE6CAE358F4A96CF2295C1A083D9B6C6BA -B5CEB5DF8154C63E666EA04A336BCFA2B8B5194779BF09104B1992C7371C109E -8C89A82225E2E88D078731946B58CB9D8F5BE95E2BEADED02E7A68B88570A83B -98B6272AEF6FBA7BAFFD8BBF6503EDD077FA4244C2A1995576E796C7F324DF9C -184DA0FC40E487F22F23D929C3A3F40A7AF4F83B298A3A96E31F7143D4B46712 -112F92D723AC14FA4E7856A1DD292E369B0C4EF9F87352C5B7DC9116D1E17D8F -76F6661DC710A1158E8DEF2D2BB03899DAA6C307082EBCDD583C1CC060CCDC16 -3713F2DC8C1A5BAD6EE2D5DB652D466054539FBFA2468EC6B482D7712064A008 -5C86DFF6ED79996A0F02FE7AE3173B53AF7685C3F5DCCD27AEFC3CCE239E4816 -12B13D7A9D11F00699384D1CE947605EFF14997105270B833F828091B8F5D749 -F5FF4A8B913E898782694D5B8DE8F97891BF6C956C2C2454D664B9947D799324 -F488E9F4930D0CACF85AF21B44D2693BD6994C2FD9F0C0A23A1187566BFD309B -43F7625447132894A4B5CC3162752BC890C9AF9115A925F9FD12E069B1447A73 -E01B55B9F2EB050ED0D6040F5023221F95D2DF816062C5AA1AAE0DF5A4E459D2 -3FF887B6AB8163179FBC3F31B64A59D76534290D9FFCF1307373238CCC379F7E -4F847BEA63C1C66D4559E785BEE9DFAFCDE279CF37F306B6BEC2F1938F6187E7 -DE8BB11CA4FC0371D15AC3D9E6E46A89DBBD9F690AEA8887976B107F90BF38FC -2C6C235569F568454C24EFACC58E7ACFE2ECA40FCA4734C3F4C4C614549F669F -E8A489A0F80277C09061BEA823992C634AD1D7041A20BDA7DDC6FC2A44F4A27C -7E0BF56A658ED3513CF151E908B40B1F7AE014E26D7C820D9A0D2FA4A65E4BFA -0448FA66B4BC9775448EA7FC89CF3C59980D2E64BE4E8B76F26B987C113DCC86 -F999CF295532FB6CAFC47CEBDA3202BE846D80AB73739BEEFCA7C3228FC27F2C -B35F6D205225ECDC06E0932641E9984CE3D53AB056D51C4C41EEDD6CC2A177AD -8230F95DB829EEAFB51F1B888A67DFAB9D06B485C260ABC5B086BADB74DDCD83 -BC4E93A3B45639814CC7B7FE027E63AEE77D89436DBCA67562CC60C03749E750 -DC3A09FE290AA918F48805C57292EC7CDB0E44BCD7E736CAF27DC2691EBA3A7F -84C38CC9C8395D17F20C5B198CD168CDAE8EB233D46EF930874C25F3B1D7F6FA -69401DEDEE59D3087628C5AD0B6D1DD979A646B37693EC4F8CC44210F3EDCFB6 -B22BEEF692B3C2E4E71D87EE75D71A3AF0178BB8BB90ED8BEB5CAB7C763D3DAC -67B426AAF471509682673FDCE4135181A09746377E398CC9BD28950E7400BFAF -89E32A8EEC6B879AC6D9EE1D48359A2478EF7A1D3CA9D98B8BEA11AC6452361A -4EE844B3152F6373E3843F58491D52615BF117081DD61154BD54CC524C98BFB7 -693FA7D9B96CF43E95A02249CD9259DD7515C78258A2CC55284CD5ED6E3B49D9 -2AFC2D5C0D984D02394157D5E6EA35086DF6AC26330FE2670F5695F0B1DDB335 -4F162E15D35E1E44A9D837CBAE7D1650A2B1540D329CDD92FFD3E1382A17B6C5 -023C14EE5B4CCE6A7128BACA9EFD6CF2E84C8F9B341620033F291C5A598F28CC -A4D142EA99FE0572E657A3F6DA85A2551A968AB16A58A21465E24EC65457533D -A3F08FB9C12AA161BB181D54AC7A2139615EDE6307EE24D10CE7BEC6D7752534 -E6E4A487A768FF6EB2525D7C9C55D8D3FDE99F659D26AF0094122E42A6C9747E -BE331E26A7B5087E1D56859E67C461A513452ACBCDE8ABA296E76DFB171EA477 -4139E5920137834337DA64773E240DE83F8EB8391CDA3ED38478D9759BE53F05 -095B75D4B16F4241372856E37D038E5E3B1E10583CFF6C2AB9FBC1BE200F040A -F20A314527D30B1F488A8F90CD82088F0FCFE8341653887E367EDA6E243E6001 -49FDD7D7F9DCA04536D02DA2EB209BE0517F7315764D7F9FA6CB90E51183C161 -3E9AC2B6BF5B3F1E6DC53239999E0E30FEA8B60EA1F63718CF53D446261883D1 -24D454DD505171EB522986C2A2BA9F765A109546EEAFCC2034710A899F200236 -80BB8CA61CC64BA305495AF2F4146761642FC4A0FEAE74865E05235C81EB1E6F -00758DF5BB2256AEBD61899C476E2C613E44235FC01DBFEBD4C8BF1AC9EDEC93 -FC8542FE7667BF5BFF4F98CD568AFDC1B0CF7E5B874A217BF8AC214DCD1C3454 -E6D91DB4AAEA06A749CF084EC81674D420BC6D42BBF6FCACA805ED46978897F8 -26F2A56CDACDBBC059C2E343E662CFB4E52CA740AB9F74917D644184D15FD02B -65AC2910CC284948F04EEAEE320536D7F682274FF77505F5BA1197E06D0A2274 -309B3FED9CD2151B9F75C0E2C36B0DB65374B707DA050D6FB5D074A3A3673241 -B48525013CBC16E647A50FAF625D05CC0D9725E6DCBB5F6A0A8F6589AD435399 -0C10184EF4FDFD1F53EB305EB64F1EC3604B4AA0B3D9C2BBC7905FACD16CDDB6 -1EA236E95C4E63E0A8410D077863F63B371AEE7F407AB462CB08E1F346A4FD71 -F0DC11366AC190C7808D9465A4B3E1179972251BDB5180E282CEA3B277459C93 -238D787EDD1CDD76FD70147762C42D339A5D8DB85ADF65B8766F342EFC00E57D -497DD1929FDDFECD8CB01240D03E318820D669B8205B345C73EE5109B9AA7EB1 -71C8579B6F78A35AC7722AD682D35D8852F453A95E67B948CCD605AC3B6F47D7 -E7CDB2A9464A0B07D396D36D25AC402CC8E9BDE1E38F60DFDC677A95D498432C -EE8BC8E957595E99161B03702B885E6302E23EABB179899C85097667CD5518F6 -40E7C12820B85A94D9FCF21B8DD01C65E16E9196650402B4E04AC72E99BFC394 -5B207552F71251FBCC365A9E2355F35C8E059423A8A0BB8FBA0D8E2147F7B5DD -CF73E36063A501398CF9EAF08B2D783F66A06C4B660B928FE138CD3CEA3698AE -DA23E6F875105FFD363B968EC3BE27CACABEC135849DA164A9D320471A7F60C4 -F5CC6FE898B1DA69525F6F3BA5CC70176B1F59BE78D655FEF04F1EDFF18761CA -C25CE5A8F14CC617A837EFF994D269F30070DC58721DCAF8B84E12DC6DDDE605 -347E41FAF0E108AE69E9E0B71802F8F98282E0D8FB3276B6D9A33EA7417EADE1 -67500A498068810BA357213D6E90EA892F410155509B8CED08554C56525F9C4D -2DCD9178BE3BC8CC6320C646590FF4925AB9599ABA8D8168CC4F8DE1FB815AC1 -D8031F9A3656D002E773459844DB987AA4ECF9F5FE8B2A0690ADF811836F2BAA -F5DA7FB2A1D81E2C38D8E15BF3DF895BB2FE4AE915DE304C55567EA18D3CD1F2 -829FAE6B28447F589D82BB70A52918A5DCDE9587C50969D4CCF574144C1F8D9B -4CADEBCB324686BB0937354013975F3C303F58080EE244A6DE2982E2970DAADA -288C54D4C16FB3F8F5AFD591327109C298FE05240D6C361BA72D9044EF5E9BA7 -21146E4F107F7C4F408C04108CC330BE7EAEED969A66BCCDFE27F10F22C213CC -896EDE048DC4DDCC1984117866F0CDA39E44AF09FA7CA3F29EC68F8A35D7560D -3DFAD13A5D46682924A3C43B4FDE357D315343D2A192DC434053E6F22CD95151 -EC038AFA00E6C0639C36BDBAE0127F27E2DC2BF7DB7A8D6CB0AA5B0B194320DB -2586D0059959EFECCA1677447CEC6C199C80A76788A61B3D1A4B69B051192E61 -CA528B0AD3EB7F2D37E23A04F34D54A2CAD84AE483703FA0B323A198A2B06806 -5C7630B9112BD7CA5C2032D1080E8F6EB7886CE7C9B864141D31154FD8D2B2FF -680E1D255A0CCF227C4BF80C5150F371E0DA2C422E6B9CB4449D06606477625A -56B0142F136DCEFE950D8ADCF88D34E305BD96D900D0784F44E40E736CB86C3B -6AF394FED5AFFC61321BA9D511D7520BBC33AFDF2C4F53BE2B7CB11D8E1B419D -9F698C305CFEFE7E391D190E608BD5E62FBC3E193DAC65F1B21EA0D535CDA3E1 -70781C4819F1B98165287D0A7E9F2A0AA9BC27D02218047A5D3247D41B387677 -FD5419E5BF713B9F9863C77EA0218E509B036B622F157F382093DA9F32DC1778 -B47FECF95A630218FC13AB09829A5D7E5A874ECF40F240FCB4177C7FCA7A6365 -76577CCD1E19CC6C9AB15542EAF6A4E8136222F29AFAAF520FA06C40E038B43C -DB4C341F31AA25F3DD92EA498661FF852937D1146260D5BBBC7E627D84B31800 -1B362FCD6C631FBED0BAE0BD019FE4767A468A94E8E14400A0F5C845DE5AFD74 -280E72812F50457152EE943295A3983DF3AA8FDEB4A09B94B4A25BBF5839144B -5C6C6E04BE342B7A744B3740D6E8413034F72E32FCB965232041229E432AF5B2 -F2F2D962EAF147ADC361D5F776783D59600EACDCEA4BF130D39B042C1F707407 -323BF1A510CF4B11631786C12805EE232CCDDBBDACE94BC3D283F5D0D3FDA65F -AA3800A395044516773D3F596595BEA5ADED5BCA272EB0C5FAA47E091BC0C77B -C12D502AB17F760968573E08E193445EABB202E0DB01175297C984EFEEA6B956 -B9C9A746DA9846B5A5862A82B1FF6D3D21DAE713939D089854106FF83C898E11 -58B9EB9DDF744E1C4AA5AB1CBE4BA3DE83921121D0E835406E7AECDC1C49F384 -A8711329BC7FF65A0D66E6852F681505DBE0CFBAFC357112665098CB7782DE3C -2A3751A44887BFDCB414788FB7C5E981C2029F8F661B494761EB8048692FDFA9 -9C2AE1FB18F18035BC0B572BB5FF87C13779DF90465F66C9F22EE4F87177A8E3 -56E32BE71E9C4A05050BBA76849536267E3F49634D833FFE863857789EAD7CE4 -ABDCA696B0AB9064D4A9FBD592134972A9834C95D8C2D31858FAB6FE0D354779 -B5E0D44A2996F3AE1F4A1444E9A3BD944CE4D015F5DDFD4A6FD285DC5BB5B3D0 -02559620703CDC4502229532E16345D7CD7C20660347DA827CCD009D78819CB6 -6ABA23033E23AF8496452D058F04AD64BDD9C19AE91AE9DF1B3C72BF5C1D5AB3 -8AED52D9BC552E3F531CB676C6E3657A013D020ACDB57CC48297BA3CFF1096B6 -679C7040831AF0734655905D088850CCD3878513D09EA3FDA53F8FFF344906EE -3661DA4B3F4A66500A5B9B7B2A18E48D7110A4375A9DCE3A7A7DA63FD80C2440 -5EAFAAA1C2F773E1C58A54E0775264A8BAD6EE25DCD32DCAEF4070946DD65558 -50CED1BE599AE6B444FF7CBCB68EB63D09E98286D14ABFA4DEA41D8AD92E9AA2 -98CA01111924E80CCC0427253DB78D1EDF14758CA5F6AF562791F2716951F03C -A5907B3D91BAAEB7E5A08B9F9EA3172F32B2D6E1C7586079AA2B1E2FF31281E6 -499B21248EE2D344DFFFEDE1B7FBAD8BE06FA96A299DDF903BB844E961833FA2 -11EAABC22885A67896558FB2A4E315E02BBC24DD4B700174FFD171D824E6F32D -E34AD2A210D5D93193DAF1CB368D5E83A660323D8B784543C9C3A3F072C3DB22 -5AEF8D3B2A4B05F54F28254845AE3C1F843C8C7BF098326939D8BDEE50D7A666 -25279CD08CCB9CD140B8E0A91CE26F7FD4290F46DE997B4F98A4C3A72431230D -F236F3333BAE93805B0C6A757F37317BA8FCA78AFD2F7A9F58853996B9AC8135 -060E92184C4DBC346F285E1F2A094C41BD803E738A5E58840BEA4D6196C29446 -7FAD1A09B0E0FD587E13239E9576C222914092DDC1405F52BAB6B37F122E7F40 -9369049979105670716CF10CB3AE1E1A57A752D6E0EF8F4C08367461B7E3572E -E5020E1C0A946777C0CF4700B448C38434C67C67DA7CDA01A3C01E145F107F92 -A817FD3762A07A8D6D08A86B6EFB6ACFE56E7FA99A370350038FC1AB1C3358A1 -FDE3EBA015EDE9CDA4A600401082DE3920D0EFC5521AB03140323E3A032DB577 -DFC16F83E7159603117BFB685637674DCB4E897065FFC5A44A56CBAFB42F78C4 -027C2820CC42FF5D8A6A8579E5B7E153955CA8443EE32F696F286B613CB11F99 -6D564F921C6765DE8568187B138F3609863D2A6E5D573E4789AC2E248DA97A06 -37A7F693180D51F9CC75E2B2D4A0ED4C1F1A599820C9FC3A12B7668198B5297C -7E76C8F8885B7556AD4F31D705BD4DD482C7C6D28DC61257F486D2AC8C34CF8A -6CEA8B398AD69AB6F55665CDCB9B2A743A09C9CDDD019F64D2829F76135745DB -24C6926FD744EA9DDB8710CB029B9DFA7EE03FCB6E3263964957C1C634468B5C -16A959326883F6D0D118346D12391C757889D54631F892EA7BDAB541B36E7953 -B4D6FB36FC4F2EDA95D35A01571C8675DC792787D06BB6D4AF3BD9C914F0EC89 -AACF7BEB5D40267CF8EB34C303C6851249A1DFE4BE30A79BAA95FF83EAF7377F -6C361D31B87D0379B67EEB6260E6021C38A86793A00BC86F97F1E6950EA877FA -514E53902891A9CE840B97EF393AA874E5C52AD0980640A8D7267E9DD1418C29 -63144AC596F880896EBA77C1B6287CE441747745A5DE244506BB48B1D938B060 -9F388E3F5041DDE6EA36A538BF58444C86DE6D1746ED6AF74119CCF81CBCCE00 -7571F824498CFB82BC86551E26330EEB918469ABC25781641F261CC395C52CEF -9F65D9D7448FC2DFB35ABE03F203771E9830CE1D4220B6921549D2E089E8C4A2 -7C82ED52AE847B53A6675C37C77C26C33547AEA0361D788397FEC78CA3EA12F4 -74D04E6AD1DD70E06958D2FBBA37CC91C6243B58DB030B669A95CDACE3B1E5AE -775CCD9FDB741059D6B3B7450F5DA98A92AE99394396DB92D96C37051C2823B5 -22DACD630ACFB1254B40001C3A699F75ACAC6BFCFA00A6C5CFA13D867E607C88 -5470214ADFE4295B643E57B3AD1DF8AC90F90B8D935F0D9ABCBD7BF46E58A568 -D829C02AEADE3435AAF6DD9CAFD7FD57854D9FB4869B681714238F9F2B1EEF21 -D48AFFDF33FD9C8AB50EC0F719C18EDBC0F876AF50840CB89AC517B8DC65CA6A -03CC999ADB424FAC6AC907283B3BD3953002DF77C1E132E0BABFC0CF29E645C0 -EFC844A0E15C7D9494527CEFBFBF7E87F50E1AFF8C52C9A3D2A3FECD061BD216 -2A59DB2A6FD82B2557D384676A77AB1F9CE2674B2CAE1288566A4089689BE473 -D17825C17B5B04FE0EDC6242B102660BF2FEF961D8EFD908A933E42A55954172 -77D48159D281D0F5180164A974B8DBA5103D23966D971CC482608FDD49DF1471 -921AE08EBF2B43B37D60F7FA3808118421BD114E30AE0AC4407D3EDDBA22CB8A -542D606DAF3BD3AE6FA4C9DAD9C0D44215D71D1E4C7EE32416991A52C001B9FD -2FF0A566172A069BD6ECC90E17FBF0DEF8518D2048A1547A48AF50E65B767CAF -0DF408E5123216A30D25103D7D9DA3A4E099C49EB05F23B351B23FDC78146A6C -AC55A81FDDF51F477AFC7BC7FBD7E45793CD05B66A861113C03F7D3BAEF1C3AF -59C0E89D028E1409218E6D75D0C9DF4030C96F6E7B8CF6054009000FE8D9EDE7 -7A6488621A69BCAB5ECB521CAE729F09E49BE076C95035BE44C16438943D3578 -499ADE9431651D3D38F95C908E055F40379B2D14580D7E2BF5C7FDFFA5E2D0A6 -59C6AB6EC5905D1053CD02566231941D92B38E585DCAF42DA4C86C5FAD2ACB44 -A4131F3A74F6AC0D4B135A05088B858D5073AF7865899F059A9FAB43B7457C36 -CDD0E5A411A083E4AAB62645FE71112C1D143C7CB838D092EDAC57393439A429 -559129E946EE237C5B4CB2BFDFC3D32ECD99A0360BC89787A38B0C57BBB3CDAA -0960FE7FA232D95B888D195578601C30198BA517F526C8368D426D7B1049EDD6 -FC36C9CAD2DCE7AE87F007233F4F1783DD06FC306A55CB0692D0A668D0A8FD4D -62D2BC739AFAC84541EEF28BCCCA352FF095BCFCD4EED4563350BF61A8F08517 -E5257AAE5C9A6CE12E6714653EA552E03612CBE4E898FB1D4D745CAF81813E05 -13D86F72F2175F9B72809CC01CC7EC3D57700F817028526AC4AD2B184F046631 -4F5F8E2840304DD1B90DF28A4F596374FCE81192C4656A0018AC6387886D85EA -4F8206C8CE899D825669321CED0DDF9642522E3A3D4317223ED5CD24BF0D7D64 -6375E46FF7C8A440B483CFD6C9196AFB2D35D8EF2491BBDC5A22A7078F08585E -5C05297B9A7C06BEE85810349F1675A24A3D1AB78672D4A633C8212BB62B84F3 -CDC1D5E350F30B08154A39BBC8FC28160A499A2B12D66AA6B8E5183D8201D4BF -FCD8EA1C9597C33AB92C4F42B1A52DAE32B9E859616D2E4FB8D0CC127B03C14F -3EC6A6923541FED895C775306DEF4BD8E1169016AC4846FAE80BF3F2CD21E65E -49E325D669E9134375C597B4959A612864E585AF8634E68563B25FB5482BC5AB -6AF17D9CD13FEC36C46AC83E0ECAABC6CEAB0599FD227A4BE2699E9B14773694 -FC0FB23BE139E9536614C4D97077FA48CBBDE26A776A7AF1A392167A7C66216C -6FAFEFDADFC5621E81F6A4B70D291A3BCC7E336DB32FBE89020880FE1F242024 -5E550B3C5C6520D7B962CE689805125AFF169EFB178A06ABBE374EDD4DFEB861 -F3B4AE7313A01ACFA26315AF290365FBA57BF85D4DFD2334954BF8606FDC8D3D -3E6EE8CC35C88BB350C8CA0843697710AC03EFA6597B0D1C2F832982CD8A2AF4 -9F5179D8370642E347B43C4E194A24B411D390A5EC83CB35269A2746ED576D2A -ADF58236ABBB4DDAE6C0B8C8B0F5A556B8C41BF15461084D434C14C72BB8744B -90424BFA46FBD91A07A5697F3A4189E1967D45EC7E829209340E846AB4F313BB -5053C3B8372C1DFFF614BA4BC26AE1B607F97C2C0C9F25E812256B136609E913 -9803082AEDBD7961220DDD1A23D69A48A7D81087FE47049DF6DB4ED9095186E9 -4B5F70AE4687577E3DFC94D2EC884F0D61641E963A361266CD46CD42129EA6E0 -896DDC893ABB5A67433D0C368A08A486693B54E5A154AFFDB87AAE3F406668F6 -D0C454A7E3C2318549F06EE0ED9754D37A473BCB8AAF13510EC727FE0718A72D -8DE699F09687C6999345C3DAE7F0E90EB774950D1B67F30807FF9D44F203B751 -DE2C383BC1BA4351C0277F5EC8DDF26FBAC7CC6CB735C501B959853A2B0BE03C -6B245AC6357A5F853D007F704915EA09760E8A979B4D4B93279727D90AF79FEF -AA2966B003371EEEAA21AF2576D8FB025D1346CF993D388D7D6895042C873B05 -26157A9D64E60788CBAE03B51A95B1B73C65BE645FA2F0C31C09F9EEEE9BF70E -3148979C2AAB48B64DB687139F704EEFB00035D785081FD8EB4F3B1B1B86A68F -012087AADEF617 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndFont -TeXDict begin 39139633 55388455 1000 600 600 (./gperf.dvi) -@start /Fa 197[25 58[{}1 90.9091 /CMMI10 rf /Fb 197[33 -58[{}1 119.552 /CMMI12 rf /Fc 197[21 58[{}1 74.7198 /CMMI9 -rf /Fd 133[34 41 1[55 41 43 30 30 30 1[43 38 43 64 21 -2[21 43 38 23 34 43 34 43 38 21 10[58 1[43 4[58 70 48 -60 39 28 2[50 1[59 55 54 58 7[38 38 38 38 38 38 38 38 -38 4[21 4[21 39[{}47 74.7198 /CMR9 rf /Fe 147[25 10[44 -97[{}2 90.9091 /CMB10 rf /Ff 139[52 52 52 3[52 1[52 6[52 -101[{}6 99.6264 /CMSLTT10 rf /Fg 214[35 35 40[{}2 90.9091 -/CMSS10 rf /Fh 136[52 1[52 52 52 52 2[52 52 4[52 52 52 -1[52 52 2[52 1[52 95[{}14 99.6264 /CMTT10 rf /Fi 133[48 -48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 51[48 45[{}25 90.9091 /CMSLTT10 rf -/Fj 138[56 56 56 56 3[56 4[56 3[56 56 56 99[{}9 109.091 -/CMTT12 rf /Fk 134[65 1[89 65 68 48 48 50 1[68 61 68 -102 34 2[34 68 61 37 56 68 55 1[60 9[127 1[94 6[96 2[96 -1[46 1[96 77 81 94 89 1[93 12[61 61 61 61 2[34 41 45[{}37 -109.091 /CMBX12 rf /Fl 141[62 1[62 8[62 62 62 101[{}5 -119.552 /CMTT12 rf /Fm 133[37 44 42 1[42 49 30 37 38 -1[46 46 51 74 23 42 1[28 46 42 28 42 46 42 42 46 4[47 -4[91 1[68 65 51 66 1[62 70 68 82 57 3[68 70 59 62 1[65 -1[68 6[28 11[28 33 5[28 4[47 34[{}45 90.9091 /CMTI10 -rf /Fn 134[48 1[66 48 51 35 36 36 1[51 45 51 76 25 48 -28 25 51 45 1[40 51 40 1[45 9[93 3[51 8[47 3[59 20[45 -3[30 25 1[45 42[{}29 90.9091 /CMSL10 rf /Fo 141[74 1[74 -8[74 74 74 101[{}5 143.462 /CMTT12 rf /Fp 130[39 1[39 -39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 1[39 39 -39 39 39 39 39 39 39 39 39 5[39 1[39 1[39 39 39 39 1[39 -39 39 39 39 2[39 39 39 39 39 1[39 39 39 5[39 39 2[39 -3[39 3[39 39 39 39 2[39 39 39 1[39 37[{}59 74.7198 /CMTT9 -rf /Fq 134[39 1[39 39 39 39 39 39 1[39 39 39 39 39 2[39 -39 39 39 39 39 1[39 39 50[39 6[39 39[{}22 74.7198 /CMSLTT10 -rf /Fr 129[48 48 1[48 48 48 48 48 48 48 48 48 48 1[48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 2[48 -1[48 2[48 1[48 48 48 48 48 48 48 48 1[48 48 1[48 48 48 -48 48 48 48 1[48 48 1[48 48 48 48 48 48 48 48 48 48 48 -48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 -34[{}80 90.9091 /CMTT10 rf /Fs 134[85 85 117 85 90 63 -64 66 1[90 81 90 134 45 85 1[45 90 81 49 74 90 72 90 -78 11[124 112 90 120 1[110 1[126 1[97 126 1[60 126 127 -1[106 124 117 115 122 9[81 81 81 81 81 81 81 3[54 45[{}47 -143.462 /CMBX12 rf /Ft 240[45 1[91 13[{}2 90.9091 /CMSY10 -rf /Fu 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 -71 1[37 75 67 41 61 75 60 75 65 7[102 3[103 94 75 100 -1[92 101 105 128 81 105 69 50 105 106 85 88 103 97 96 -102 9[67 67 67 67 67 67 67 2[37 45 7[112 24[75 78 11[{}56 -119.552 /CMBX12 rf /Fv 131[91 45 40 48 48 66 48 51 35 -36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 -45 25 2[25 45 25 1[68 68 93 68 68 66 51 67 71 62 71 68 -83 57 71 47 33 68 71 59 62 69 66 64 68 3[71 1[25 25 45 -45 45 45 45 45 45 45 45 45 45 25 30 25 1[45 35 35 25 -71 1[45 76 45 19[76 51 51 53 11[{}86 90.9091 /CMR10 rf -/Fw 141[89 1[89 8[89 89 89 101[{}5 172.154 /CMTT12 rf -/Fx 138[108 75 76 79 2[97 5[54 3[88 108 14[149 13[152 -19[97 1[97 2[54 6[54 39[{}14 172.154 /CMBX12 rf end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 600dpi -TeXDict begin -%%BeginPaperSize: a4 -<< /PageSize [595 842] >> setpagedevice -%%EndPaperSize - end -%%EndSetup -%%Page: 1 1 -TeXDict begin 1 0 bop 150 1318 a Fx(User's)65 b(Guide)g(to)f -Fw(gperf)f Fx(3.1)p 150 1423 3600 34 v 2005 1519 a Fv(The)30 -b(GNU)h(P)m(erfect)h(Hash)e(F)-8 b(unction)31 b(Generator)2528 -1627 y(Edition)f(3.1,)i(20)f(Decem)m(b)s(er)g(2009)150 -4958 y Fu(Douglas)46 b(C.)f(Sc)l(hmidt)150 5091 y(Bruno)f(Haible)p -150 5141 3600 17 v eop end -%%Page: 2 2 -TeXDict begin 2 1 bop 150 4152 a Fv(Cop)m(yrigh)m(t)602 -4149 y(c)577 4152 y Ft(\015)30 b Fv(1989-2009)k(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(Inc.)150 -4286 y(P)m(ermission)g(is)h(gran)m(ted)g(to)f(mak)m(e)i(and)d -(distribute)h(v)m(erbatim)h(copies)g(of)f(this)g(man)m(ual)h(pro)m -(vided)f(the)150 4396 y(cop)m(yrigh)m(t)g(notice)f(and)f(this)g(p)s -(ermission)g(notice)h(are)g(preserv)m(ed)f(on)h(all)g(copies.)150 -4530 y(P)m(ermission)38 b(is)h(gran)m(ted)f(to)h(cop)m(y)g(and)f -(distribute)g(mo)s(di\014ed)f(v)m(ersions)h(of)h(this)f(man)m(ual)g -(under)f(the)150 4640 y(conditions)44 b(for)f(v)m(erbatim)h(cop)m -(ying,)k(pro)m(vided)43 b(also)h(that)h(the)e(section)i(en)m(titled)g -(\\GNU)f(General)150 4749 y(Public)27 b(License")g(is)g(included)f -(exactly)j(as)e(in)f(the)h(original,)i(and)d(pro)m(vided)h(that)g(the)g -(en)m(tire)h(resulting)150 4859 y(deriv)m(ed)i(w)m(ork)h(is)f -(distributed)g(under)f(the)h(terms)g(of)h(a)g(p)s(ermission)e(notice)j -(iden)m(tical)g(to)f(this)f(one.)150 4994 y(P)m(ermission)j(is)h(gran)m -(ted)f(to)h(cop)m(y)g(and)f(distribute)f(translations)i(of)g(this)f -(man)m(ual)g(in)m(to)h(another)f(lan-)150 5103 y(guage,)41 -b(under)35 b(the)j(ab)s(o)m(v)m(e)g(conditions)g(for)f(mo)s(di\014ed)g -(v)m(ersions,)i(except)g(that)e(the)h(section)g(en)m(titled)150 -5213 y(\\GNU)e(General)h(Public)e(License")h(ma)m(y)g(b)s(e)e(included) -h(in)g(a)h(translation)g(appro)m(v)m(ed)f(b)m(y)h(the)f(author)150 -5322 y(instead)c(of)f(in)g(the)h(original)g(English.)p -eop end -%%Page: 1 3 -TeXDict begin 1 2 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(1)150 299 y Fs(GNU)54 b(GENERAL)g(PUBLIC)f(LICENSE)1477 -521 y Fv(V)-8 b(ersion)31 b(3,)g(29)g(June)e(2007)390 -663 y(Cop)m(yrigh)m(t)842 660 y(c)817 663 y Ft(\015)h -Fv(2007)i(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 -b(Inc.)e Fr(http://fsf.org/)390 882 y Fv(Ev)m(ery)m(one)h(is)g(p)s -(ermitted)f(to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)g -(of)g(this)390 991 y(license)g(do)s(cumen)m(t,)g(but)e(c)m(hanging)j -(it)f(is)f(not)h(allo)m(w)m(ed.)150 1234 y Fu(Pream)l(ble)275 -1393 y Fv(The)e(GNU)h(General)h(Public)e(License)h(is)g(a)g(free,)g -(cop)m(yleft)i(license)e(for)g(soft)m(w)m(are)h(and)e(other)h(kinds)150 -1503 y(of)h(w)m(orks.)275 1644 y(The)c(licenses)i(for)e(most)i(soft)m -(w)m(are)g(and)e(other)i(practical)g(w)m(orks)f(are)g(designed)g(to)h -(tak)m(e)g(a)m(w)m(a)m(y)h(y)m(our)150 1753 y(freedom)k(to)h(share)e -(and)h(c)m(hange)h(the)f(w)m(orks.)51 b(By)35 b(con)m(trast,)h(the)e -(GNU)h(General)g(Public)e(License)i(is)150 1863 y(in)m(tended)25 -b(to)h(guaran)m(tee)h(y)m(our)e(freedom)g(to)h(share)f(and)f(c)m(hange) -j(all)f(v)m(ersions)f(of)h(a)f(program|to)h(mak)m(e)150 -1973 y(sure)35 b(it)h(remains)f(free)h(soft)m(w)m(are)h(for)f(all)g -(its)g(users.)56 b(W)-8 b(e,)38 b(the)e(F)-8 b(ree)37 -b(Soft)m(w)m(are)g(F)-8 b(oundation,)37 b(use)f(the)150 -2082 y(GNU)j(General)g(Public)f(License)g(for)g(most)h(of)f(our)f(soft) -m(w)m(are;)44 b(it)39 b(applies)f(also)h(to)g(an)m(y)f(other)h(w)m(ork) -150 2192 y(released)31 b(this)f(w)m(a)m(y)i(b)m(y)e(its)h(authors.)40 -b(Y)-8 b(ou)31 b(can)g(apply)f(it)h(to)g(y)m(our)f(programs,)g(to)s(o.) -275 2333 y(When)37 b(w)m(e)g(sp)s(eak)g(of)g(free)h(soft)m(w)m(are,)i -(w)m(e)e(are)g(referring)e(to)i(freedom,)h(not)f(price.)61 -b(Our)36 b(General)150 2443 y(Public)e(Licenses)g(are)h(designed)f(to)h -(mak)m(e)g(sure)f(that)g(y)m(ou)h(ha)m(v)m(e)g(the)g(freedom)f(to)g -(distribute)g(copies)150 2552 y(of)e(free)f(soft)m(w)m(are)i(\(and)e(c) -m(harge)i(for)e(them)h(if)f(y)m(ou)h(wish\),)f(that)h(y)m(ou)g(receiv)m -(e)h(source)f(co)s(de)g(or)f(can)h(get)150 2662 y(it)e(if)f(y)m(ou)g(w) -m(an)m(t)i(it,)f(that)g(y)m(ou)f(can)h(c)m(hange)g(the)f(soft)m(w)m -(are)i(or)e(use)g(pieces)h(of)f(it)h(in)f(new)g(free)g(programs,)150 -2771 y(and)h(that)h(y)m(ou)f(kno)m(w)h(y)m(ou)g(can)f(do)g(these)h -(things.)275 2912 y(T)-8 b(o)24 b(protect)h(y)m(our)f(righ)m(ts,)i(w)m -(e)f(need)f(to)h(prev)m(en)m(t)g(others)f(from)g(den)m(ying)g(y)m(ou)g -(these)h(righ)m(ts)f(or)g(asking)150 3022 y(y)m(ou)37 -b(to)g(surrender)d(the)j(righ)m(ts.)60 b(Therefore,)38 -b(y)m(ou)f(ha)m(v)m(e)g(certain)h(resp)s(onsibilities)e(if)h(y)m(ou)f -(distribute)150 3132 y(copies)30 b(of)f(the)g(soft)m(w)m(are,)i(or)e -(if)f(y)m(ou)i(mo)s(dify)e(it:)40 b(resp)s(onsibilities)29 -b(to)h(resp)s(ect)f(the)g(freedom)g(of)g(others.)275 -3273 y(F)-8 b(or)30 b(example,)g(if)g(y)m(ou)f(distribute)g(copies)i -(of)e(suc)m(h)g(a)h(program,)g(whether)e(gratis)j(or)e(for)g(a)h(fee,)h -(y)m(ou)150 3382 y(m)m(ust)i(pass)f(on)h(to)h(the)f(recipien)m(ts)h -(the)f(same)h(freedoms)e(that)i(y)m(ou)f(receiv)m(ed.)50 -b(Y)-8 b(ou)34 b(m)m(ust)f(mak)m(e)h(sure)150 3492 y(that)29 -b(they)-8 b(,)29 b(to)s(o,)h(receiv)m(e)g(or)f(can)f(get)i(the)e -(source)h(co)s(de.)40 b(And)27 b(y)m(ou)i(m)m(ust)f(sho)m(w)g(them)h -(these)f(terms)h(so)150 3601 y(they)i(kno)m(w)f(their)g(righ)m(ts.)275 -3743 y(Dev)m(elop)s(ers)i(that)f(use)g(the)g(GNU)h(GPL)f(protect)g(y)m -(our)g(righ)m(ts)h(with)e(t)m(w)m(o)j(steps:)41 b(\(1\))32 -b(assert)g(cop)m(y-)150 3852 y(righ)m(t)38 b(on)e(the)h(soft)m(w)m -(are,)k(and)36 b(\(2\))i(o\013er)g(y)m(ou)f(this)g(License)g(giving)h -(y)m(ou)f(legal)i(p)s(ermission)d(to)i(cop)m(y)-8 b(,)150 -3962 y(distribute)30 b(and/or)g(mo)s(dify)g(it.)275 4103 -y(F)-8 b(or)35 b(the)g(dev)m(elop)s(ers')h(and)e(authors')h -(protection,)j(the)d(GPL)g(clearly)h(explains)f(that)h(there)f(is)g(no) -150 4213 y(w)m(arran)m(t)m(y)g(for)f(this)g(free)g(soft)m(w)m(are.)54 -b(F)-8 b(or)35 b(b)s(oth)e(users')h(and)g(authors')g(sak)m(e,)i(the)e -(GPL)h(requires)e(that)150 4322 y(mo)s(di\014ed)42 b(v)m(ersions)i(b)s -(e)f(mark)m(ed)g(as)h(c)m(hanged,)j(so)d(that)g(their)f(problems)g -(will)g(not)h(b)s(e)f(attributed)150 4432 y(erroneously)30 -b(to)h(authors)f(of)h(previous)f(v)m(ersions.)275 4573 -y(Some)e(devices)h(are)f(designed)g(to)h(den)m(y)f(users)g(access)h(to) -g(install)g(or)f(run)f(mo)s(di\014ed)g(v)m(ersions)h(of)h(the)150 -4682 y(soft)m(w)m(are)34 b(inside)e(them,)g(although)h(the)f(man)m -(ufacturer)g(can)h(do)f(so.)46 b(This)32 b(is)g(fundamen)m(tally)g -(incom-)150 4792 y(patible)j(with)e(the)h(aim)h(of)f(protecting)h -(users')e(freedom)h(to)h(c)m(hange)g(the)f(soft)m(w)m(are.)53 -b(The)33 b(systematic)150 4902 y(pattern)j(of)g(suc)m(h)g(abuse)f(o)s -(ccurs)h(in)f(the)i(area)f(of)g(pro)s(ducts)f(for)h(individuals)f(to)h -(use,)i(whic)m(h)d(is)h(pre-)150 5011 y(cisely)d(where)e(it)h(is)f -(most)h(unacceptable.)46 b(Therefore,)32 b(w)m(e)g(ha)m(v)m(e)h -(designed)e(this)g(v)m(ersion)h(of)g(the)g(GPL)150 5121 -y(to)38 b(prohibit)e(the)i(practice)g(for)f(those)h(pro)s(ducts.)60 -b(If)37 b(suc)m(h)f(problems)h(arise)h(substan)m(tially)g(in)f(other) -150 5230 y(domains,)28 b(w)m(e)f(stand)g(ready)g(to)h(extend)f(this)g -(pro)m(vision)g(to)h(those)f(domains)g(in)g(future)f(v)m(ersions)i(of)f -(the)150 5340 y(GPL,)k(as)f(needed)g(to)h(protect)h(the)e(freedom)h(of) -f(users.)p eop end -%%Page: 2 4 -TeXDict begin 2 3 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(2)275 299 y(Finally)-8 b(,)34 b(ev)m(ery)f(program)f -(is)g(threatened)h(constan)m(tly)h(b)m(y)e(soft)m(w)m(are)i(paten)m -(ts.)47 b(States)33 b(should)f(not)150 408 y(allo)m(w)25 -b(paten)m(ts)e(to)h(restrict)g(dev)m(elopmen)m(t)g(and)f(use)g(of)g -(soft)m(w)m(are)h(on)f(general-purp)s(ose)g(computers,)i(but)150 -518 y(in)h(those)h(that)g(do,)g(w)m(e)g(wish)f(to)h(a)m(v)m(oid)h(the)e -(sp)s(ecial)h(danger)f(that)h(paten)m(ts)h(applied)e(to)h(a)g(free)f -(program)150 628 y(could)h(mak)m(e)i(it)f(e\013ectiv)m(ely)i -(proprietary)-8 b(.)40 b(T)-8 b(o)28 b(prev)m(en)m(t)g(this,)g(the)g -(GPL)f(assures)g(that)h(paten)m(ts)g(cannot)150 737 y(b)s(e)i(used)f -(to)i(render)f(the)g(program)g(non-free.)275 881 y(The)f(precise)i -(terms)f(and)g(conditions)h(for)f(cop)m(ying,)i(distribution)d(and)h -(mo)s(di\014cation)h(follo)m(w.)150 1128 y Fu(TERMS)44 -b(AND)h(CONDITIONS)199 1287 y Fv(0.)61 b(De\014nitions.)330 -1427 y(\\This)30 b(License")h(refers)f(to)i(v)m(ersion)e(3)h(of)g(the)f -(GNU)h(General)g(Public)g(License.)330 1566 y(\\Cop)m(yrigh)m(t")e -(also)g(means)e(cop)m(yrigh)m(t-lik)m(e)k(la)m(ws)d(that)g(apply)f(to)h -(other)g(kinds)f(of)g(w)m(orks,)h(suc)m(h)g(as)330 1676 -y(semiconductor)j(masks.)330 1815 y(\\The)40 b(Program")h(refers)f(to)g -(an)m(y)h(cop)m(yrigh)m(table)h(w)m(ork)e(licensed)h(under)e(this)h -(License.)70 b(Eac)m(h)330 1924 y(licensee)43 b(is)f(addressed)f(as)h -(\\y)m(ou".)76 b(\\Licensees")44 b(and)d(\\recipien)m(ts")i(ma)m(y)g(b) -s(e)e(individuals)g(or)330 2034 y(organizations.)330 -2173 y(T)-8 b(o)32 b(\\mo)s(dify")g(a)g(w)m(ork)g(means)g(to)h(cop)m(y) -f(from)g(or)f(adapt)h(all)h(or)f(part)g(of)g(the)g(w)m(ork)f(in)h(a)g -(fashion)330 2283 y(requiring)d(cop)m(yrigh)m(t)h(p)s(ermission,)e -(other)i(than)f(the)g(making)g(of)g(an)g(exact)i(cop)m(y)-8 -b(.)41 b(The)29 b(resulting)330 2392 y(w)m(ork)f(is)f(called)i(a)f -(\\mo)s(di\014ed)f(v)m(ersion")i(of)f(the)g(earlier)g(w)m(ork)g(or)g(a) -g(w)m(ork)f(\\based)h(on")g(the)g(earlier)330 2502 y(w)m(ork.)330 -2641 y(A)k(\\co)m(v)m(ered)i(w)m(ork")f(means)f(either)g(the)g(unmo)s -(di\014ed)e(Program)i(or)g(a)h(w)m(ork)f(based)g(on)g(the)g(Pro-)330 -2751 y(gram.)330 2890 y(T)-8 b(o)31 b(\\propagate")i(a)e(w)m(ork)g -(means)g(to)h(do)e(an)m(ything)i(with)e(it)h(that,)h(without)f(p)s -(ermission,)f(w)m(ould)330 3000 y(mak)m(e)c(y)m(ou)e(directly)i(or)e -(secondarily)h(liable)h(for)e(infringemen)m(t)h(under)e(applicable)i -(cop)m(yrigh)m(t)h(la)m(w,)330 3109 y(except)34 b(executing)g(it)g(on)e -(a)i(computer)f(or)f(mo)s(difying)h(a)g(priv)-5 b(ate)33 -b(cop)m(y)-8 b(.)50 b(Propagation)34 b(includes)330 3219 -y(cop)m(ying,)39 b(distribution)c(\(with)h(or)h(without)f(mo)s -(di\014cation\),)i(making)f(a)m(v)-5 b(ailable)38 b(to)f(the)f(public,) -330 3329 y(and)30 b(in)g(some)h(coun)m(tries)g(other)f(activities)j(as) -e(w)m(ell.)330 3468 y(T)-8 b(o)28 b(\\con)m(v)m(ey")j(a)d(w)m(ork)g -(means)g(an)m(y)g(kind)f(of)h(propagation)h(that)g(enables)f(other)g -(parties)g(to)h(mak)m(e)330 3577 y(or)k(receiv)m(e)j(copies.)50 -b(Mere)34 b(in)m(teraction)i(with)d(a)g(user)g(through)g(a)g(computer)h -(net)m(w)m(ork,)h(with)e(no)330 3687 y(transfer)d(of)g(a)h(cop)m(y)-8 -b(,)32 b(is)e(not)h(con)m(v)m(eying.)330 3826 y(An)25 -b(in)m(teractiv)m(e)k(user)c(in)m(terface)j(displa)m(ys)e -(\\Appropriate)g(Legal)h(Notices")h(to)f(the)f(exten)m(t)h(that)f(it) -330 3936 y(includes)k(a)g(con)m(v)m(enien)m(t)j(and)c(prominen)m(tly)h -(visible)h(feature)g(that)f(\(1\))i(displa)m(ys)e(an)g(appropriate)330 -4045 y(cop)m(yrigh)m(t)j(notice,)h(and)d(\(2\))i(tells)f(the)g(user)f -(that)i(there)e(is)h(no)g(w)m(arran)m(t)m(y)g(for)g(the)g(w)m(ork)g -(\(except)330 4155 y(to)e(the)g(exten)m(t)h(that)f(w)m(arran)m(ties)g -(are)g(pro)m(vided\),)g(that)g(licensees)g(ma)m(y)g(con)m(v)m(ey)h(the) -f(w)m(ork)f(under)330 4265 y(this)37 b(License,)i(and)e(ho)m(w)g(to)g -(view)h(a)f(cop)m(y)h(of)f(this)g(License.)61 b(If)36 -b(the)i(in)m(terface)g(presen)m(ts)f(a)g(list)330 4374 -y(of)32 b(user)e(commands)h(or)h(options,)g(suc)m(h)f(as)g(a)h(men)m -(u,)f(a)h(prominen)m(t)f(item)h(in)f(the)h(list)g(meets)g(this)330 -4484 y(criterion.)199 4623 y(1.)61 b(Source)30 b(Co)s(de.)330 -4762 y(The)g(\\source)i(co)s(de")f(for)g(a)g(w)m(ork)g(means)g(the)g -(preferred)f(form)g(of)h(the)g(w)m(ork)g(for)g(making)g(mo)s(di-)330 -4872 y(\014cations)g(to)g(it.)41 b(\\Ob)5 b(ject)31 b(co)s(de")g(means) -g(an)m(y)f(non-source)h(form)f(of)g(a)h(w)m(ork.)330 -5011 y(A)36 b(\\Standard)f(In)m(terface")i(means)f(an)f(in)m(terface)i -(that)g(either)f(is)g(an)f(o\016cial)i(standard)e(de\014ned)330 -5121 y(b)m(y)e(a)g(recognized)i(standards)d(b)s(o)s(dy)-8 -b(,)33 b(or,)h(in)f(the)g(case)h(of)f(in)m(terfaces)i(sp)s(eci\014ed)d -(for)h(a)h(particular)330 5230 y(programming)44 b(language,)49 -b(one)c(that)f(is)g(widely)h(used)e(among)i(dev)m(elop)s(ers)f(w)m -(orking)h(in)e(that)330 5340 y(language.)p eop end -%%Page: 3 5 -TeXDict begin 3 4 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(3)330 299 y(The)24 b(\\System)g(Libraries")g(of)g(an)g -(executable)i(w)m(ork)e(include)f(an)m(ything,)j(other)f(than)e(the)i -(w)m(ork)f(as)330 408 y(a)k(whole,)g(that)g(\(a\))g(is)f(included)g(in) -g(the)g(normal)g(form)g(of)h(pac)m(k)-5 b(aging)29 b(a)e(Ma)5 -b(jor)28 b(Comp)s(onen)m(t,)g(but)330 518 y(whic)m(h)33 -b(is)g(not)h(part)f(of)h(that)g(Ma)5 b(jor)34 b(Comp)s(onen)m(t,)g(and) -e(\(b\))i(serv)m(es)g(only)f(to)h(enable)g(use)f(of)h(the)330 -628 y(w)m(ork)c(with)g(that)g(Ma)5 b(jor)31 b(Comp)s(onen)m(t,)e(or)h -(to)h(implemen)m(t)g(a)f(Standard)f(In)m(terface)i(for)e(whic)m(h)h(an) -330 737 y(implemen)m(tation)g(is)e(a)m(v)-5 b(ailable)30 -b(to)f(the)f(public)g(in)f(source)i(co)s(de)f(form.)39 -b(A)29 b(\\Ma)5 b(jor)29 b(Comp)s(onen)m(t",)330 847 -y(in)38 b(this)g(con)m(text,)k(means)c(a)g(ma)5 b(jor)38 -b(essen)m(tial)i(comp)s(onen)m(t)e(\(k)m(ernel,)j(windo)m(w)d(system,)i -(and)e(so)330 956 y(on\))c(of)g(the)g(sp)s(eci\014c)f(op)s(erating)h -(system)g(\(if)g(an)m(y\))h(on)e(whic)m(h)h(the)g(executable)h(w)m(ork) -f(runs,)f(or)h(a)330 1066 y(compiler)d(used)f(to)h(pro)s(duce)e(the)h -(w)m(ork,)h(or)f(an)h(ob)5 b(ject)31 b(co)s(de)g(in)m(terpreter)f(used) -g(to)h(run)e(it.)330 1212 y(The)f(\\Corresp)s(onding)g(Source")h(for)f -(a)h(w)m(ork)g(in)g(ob)5 b(ject)29 b(co)s(de)g(form)g(means)f(all)i -(the)f(source)g(co)s(de)330 1322 y(needed)35 b(to)h(generate,)i -(install,)f(and)e(\(for)g(an)h(executable)g(w)m(ork\))g(run)e(the)h(ob) -5 b(ject)36 b(co)s(de)g(and)e(to)330 1431 y(mo)s(dify)39 -b(the)g(w)m(ork,)j(including)d(scripts)g(to)i(con)m(trol)f(those)g -(activities.)71 b(Ho)m(w)m(ev)m(er,)44 b(it)c(do)s(es)f(not)330 -1541 y(include)i(the)h(w)m(ork's)g(System)g(Libraries,)i(or)e -(general-purp)s(ose)f(to)s(ols)i(or)f(generally)h(a)m(v)-5 -b(ailable)330 1650 y(free)31 b(programs)g(whic)m(h)g(are)h(used)e(unmo) -s(di\014ed)f(in)i(p)s(erforming)f(those)h(activities)j(but)d(whic)m(h)g -(are)330 1760 y(not)g(part)f(of)h(the)g(w)m(ork.)42 b(F)-8 -b(or)32 b(example,)f(Corresp)s(onding)e(Source)i(includes)f(in)m -(terface)i(de\014nition)330 1870 y(\014les)g(asso)s(ciated)i(with)d -(source)i(\014les)f(for)g(the)g(w)m(ork,)h(and)f(the)g(source)g(co)s -(de)h(for)e(shared)h(libraries)330 1979 y(and)g(dynamically)g(link)m -(ed)h(subprograms)e(that)h(the)h(w)m(ork)f(is)g(sp)s(eci\014cally)h -(designed)f(to)h(require,)330 2089 y(suc)m(h)k(as)g(b)m(y)g(in)m -(timate)i(data)e(comm)m(unication)i(or)e(con)m(trol)h(\015o)m(w)f(b)s -(et)m(w)m(een)h(those)f(subprograms)330 2198 y(and)30 -b(other)g(parts)g(of)h(the)g(w)m(ork.)330 2345 y(The)h(Corresp)s -(onding)f(Source)i(need)f(not)h(include)f(an)m(ything)i(that)f(users)f -(can)h(regenerate)h(auto-)330 2454 y(matically)e(from)e(other)h(parts)f -(of)h(the)f(Corresp)s(onding)f(Source.)330 2600 y(The)h(Corresp)s -(onding)e(Source)j(for)f(a)h(w)m(ork)f(in)g(source)h(co)s(de)f(form)g -(is)h(that)f(same)h(w)m(ork.)199 2746 y(2.)61 b(Basic)32 -b(P)m(ermissions.)330 2892 y(All)44 b(righ)m(ts)f(gran)m(ted)g(under)f -(this)h(License)g(are)g(gran)m(ted)h(for)f(the)g(term)g(of)g(cop)m -(yrigh)m(t)h(on)f(the)330 3002 y(Program,)29 b(and)e(are)i(irrev)m(o)s -(cable)g(pro)m(vided)f(the)g(stated)h(conditions)g(are)f(met.)40 -b(This)28 b(License)g(ex-)330 3112 y(plicitly)h(a\016rms)e(y)m(our)h -(unlimited)g(p)s(ermission)e(to)j(run)d(the)i(unmo)s(di\014ed)e -(Program.)40 b(The)27 b(output)330 3221 y(from)37 b(running)e(a)j(co)m -(v)m(ered)h(w)m(ork)e(is)g(co)m(v)m(ered)i(b)m(y)e(this)h(License)f -(only)h(if)f(the)g(output,)i(giv)m(en)g(its)330 3331 -y(con)m(ten)m(t,)33 b(constitutes)f(a)g(co)m(v)m(ered)g(w)m(ork.)42 -b(This)31 b(License)g(ac)m(kno)m(wledges)i(y)m(our)e(righ)m(ts)g(of)g -(fair)g(use)330 3440 y(or)f(other)h(equiv)-5 b(alen)m(t,)32 -b(as)f(pro)m(vided)f(b)m(y)g(cop)m(yrigh)m(t)i(la)m(w.)330 -3587 y(Y)-8 b(ou)41 b(ma)m(y)h(mak)m(e,)i(run)c(and)g(propagate)i(co)m -(v)m(ered)g(w)m(orks)f(that)g(y)m(ou)h(do)e(not)h(con)m(v)m(ey)-8 -b(,)46 b(without)330 3696 y(conditions)30 b(so)f(long)h(as)g(y)m(our)f -(license)h(otherwise)g(remains)f(in)g(force.)41 b(Y)-8 -b(ou)30 b(ma)m(y)f(con)m(v)m(ey)i(co)m(v)m(ered)330 3806 -y(w)m(orks)40 b(to)g(others)g(for)g(the)g(sole)g(purp)s(ose)e(of)i(ha)m -(ving)h(them)e(mak)m(e)i(mo)s(di\014cations)f(exclusiv)m(ely)330 -3915 y(for)45 b(y)m(ou,)50 b(or)45 b(pro)m(vide)h(y)m(ou)f(with)g -(facilities)j(for)d(running)f(those)h(w)m(orks,)50 b(pro)m(vided)45 -b(that)h(y)m(ou)330 4025 y(comply)34 b(with)f(the)h(terms)f(of)h(this)f -(License)i(in)e(con)m(v)m(eying)i(all)g(material)g(for)e(whic)m(h)g(y)m -(ou)h(do)g(not)330 4134 y(con)m(trol)i(cop)m(yrigh)m(t.)55 -b(Those)35 b(th)m(us)f(making)h(or)g(running)e(the)i(co)m(v)m(ered)h(w) -m(orks)f(for)f(y)m(ou)h(m)m(ust)g(do)330 4244 y(so)29 -b(exclusiv)m(ely)h(on)e(y)m(our)g(b)s(ehalf,)h(under)d(y)m(our)j -(direction)g(and)f(con)m(trol,)i(on)e(terms)h(that)g(prohibit)330 -4354 y(them)35 b(from)g(making)g(an)m(y)h(copies)g(of)f(y)m(our)h(cop)m -(yrigh)m(ted)g(material)h(outside)e(their)h(relationship)330 -4463 y(with)30 b(y)m(ou.)330 4609 y(Con)m(v)m(eying)46 -b(under)d(an)m(y)i(other)g(circumstances)g(is)g(p)s(ermitted)g(solely)g -(under)f(the)g(conditions)330 4719 y(stated)31 b(b)s(elo)m(w.)41 -b(Sublicensing)30 b(is)g(not)h(allo)m(w)m(ed;)h(section)g(10)f(mak)m -(es)g(it)g(unnecessary)-8 b(.)199 4865 y(3.)61 b(Protecting)32 -b(Users')e(Legal)i(Righ)m(ts)f(F)-8 b(rom)31 b(An)m(ti-Circum)m(v)m(en) -m(tion)i(La)m(w.)330 5011 y(No)44 b(co)m(v)m(ered)i(w)m(ork)d(shall)h -(b)s(e)g(deemed)f(part)h(of)g(an)f(e\013ectiv)m(e)k(tec)m(hnological)g -(measure)c(under)330 5121 y(an)m(y)30 b(applicable)h(la)m(w)f -(ful\014lling)g(obligations)h(under)e(article)i(11)g(of)f(the)g(WIPO)f -(cop)m(yrigh)m(t)i(treat)m(y)330 5230 y(adopted)e(on)f(20)i(Decem)m(b)s -(er)f(1996,)i(or)e(similar)g(la)m(ws)g(prohibiting)f(or)h(restricting)g -(circum)m(v)m(en)m(tion)330 5340 y(of)i(suc)m(h)f(measures.)p -eop end -%%Page: 4 6 -TeXDict begin 4 5 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(4)330 299 y(When)25 b(y)m(ou)h(con)m(v)m(ey)g(a)g(co)m -(v)m(ered)h(w)m(ork,)f(y)m(ou)g(w)m(aiv)m(e)h(an)m(y)e(legal)i(p)s(o)m -(w)m(er)f(to)g(forbid)e(circum)m(v)m(en)m(tion)j(of)330 -408 y(tec)m(hnological)j(measures)d(to)g(the)g(exten)m(t)h(suc)m(h)e -(circum)m(v)m(en)m(tion)j(is)d(e\013ected)i(b)m(y)f(exercising)g(righ)m -(ts)330 518 y(under)35 b(this)h(License)h(with)e(resp)s(ect)i(to)g(the) -f(co)m(v)m(ered)i(w)m(ork,)g(and)d(y)m(ou)i(disclaim)g(an)m(y)f(in)m -(ten)m(tion)330 628 y(to)41 b(limit)g(op)s(eration)g(or)f(mo)s -(di\014cation)h(of)g(the)f(w)m(ork)h(as)f(a)h(means)f(of)h(enforcing,)i -(against)f(the)330 737 y(w)m(ork's)28 b(users,)f(y)m(our)h(or)f(third)g -(parties')h(legal)h(righ)m(ts)f(to)g(forbid)f(circum)m(v)m(en)m(tion)i -(of)e(tec)m(hnological)330 847 y(measures.)199 982 y(4.)61 -b(Con)m(v)m(eying)31 b(V)-8 b(erbatim)32 b(Copies.)330 -1117 y(Y)-8 b(ou)28 b(ma)m(y)g(con)m(v)m(ey)h(v)m(erbatim)f(copies)g -(of)g(the)f(Program's)h(source)g(co)s(de)f(as)h(y)m(ou)f(receiv)m(e)j -(it,)f(in)e(an)m(y)330 1226 y(medium,)33 b(pro)m(vided)g(that)h(y)m(ou) -f(conspicuously)g(and)g(appropriately)g(publish)f(on)h(eac)m(h)h(cop)m -(y)g(an)330 1336 y(appropriate)e(cop)m(yrigh)m(t)i(notice;)g(k)m(eep)f -(in)m(tact)h(all)f(notices)g(stating)h(that)e(this)g(License)h(and)f -(an)m(y)330 1445 y(non-p)s(ermissiv)m(e)d(terms)g(added)f(in)h(accord)h -(with)f(section)h(7)f(apply)g(to)h(the)f(co)s(de;)h(k)m(eep)g(in)m -(tact)h(all)330 1555 y(notices)37 b(of)f(the)g(absence)g(of)g(an)m(y)g -(w)m(arran)m(t)m(y;)j(and)c(giv)m(e)i(all)g(recipien)m(ts)f(a)h(cop)m -(y)f(of)g(this)f(License)330 1665 y(along)c(with)f(the)h(Program.)330 -1799 y(Y)-8 b(ou)27 b(ma)m(y)g(c)m(harge)h(an)m(y)f(price)g(or)f(no)h -(price)f(for)h(eac)m(h)g(cop)m(y)h(that)f(y)m(ou)g(con)m(v)m(ey)-8 -b(,)29 b(and)d(y)m(ou)h(ma)m(y)h(o\013er)330 1909 y(supp)s(ort)h(or)h -(w)m(arran)m(t)m(y)h(protection)h(for)e(a)h(fee.)199 -2044 y(5.)61 b(Con)m(v)m(eying)31 b(Mo)s(di\014ed)f(Source)g(V)-8 -b(ersions.)330 2179 y(Y)g(ou)27 b(ma)m(y)g(con)m(v)m(ey)h(a)f(w)m(ork)g -(based)f(on)h(the)g(Program,)g(or)g(the)g(mo)s(di\014cations)g(to)g -(pro)s(duce)e(it)i(from)330 2288 y(the)36 b(Program,)h(in)e(the)g(form) -g(of)g(source)h(co)s(de)g(under)d(the)j(terms)f(of)h(section)g(4,)h -(pro)m(vided)e(that)330 2398 y(y)m(ou)c(also)g(meet)g(all)h(of)e(these) -h(conditions:)379 2533 y(a.)61 b(The)28 b(w)m(ork)h(m)m(ust)f(carry)h -(prominen)m(t)f(notices)i(stating)g(that)f(y)m(ou)g(mo)s(di\014ed)e -(it,)j(and)e(giving)i(a)510 2642 y(relev)-5 b(an)m(t)32 -b(date.)374 2777 y(b.)60 b(The)34 b(w)m(ork)h(m)m(ust)f(carry)h -(prominen)m(t)f(notices)i(stating)g(that)f(it)g(is)g(released)g(under)e -(this)i(Li-)510 2887 y(cense)i(and)f(an)m(y)h(conditions)h(added)e -(under)f(section)j(7.)60 b(This)36 b(requiremen)m(t)h(mo)s(di\014es)f -(the)510 2996 y(requiremen)m(t)31 b(in)f(section)h(4)g(to)g(\\k)m(eep)h -(in)m(tact)g(all)f(notices".)384 3131 y(c.)61 b(Y)-8 -b(ou)36 b(m)m(ust)g(license)g(the)g(en)m(tire)h(w)m(ork,)g(as)f(a)g -(whole,)h(under)d(this)i(License)g(to)h(an)m(y)m(one)f(who)510 -3241 y(comes)31 b(in)m(to)g(p)s(ossession)e(of)h(a)h(cop)m(y)-8 -b(.)41 b(This)29 b(License)i(will)f(therefore)h(apply)-8 -b(,)30 b(along)h(with)f(an)m(y)510 3351 y(applicable)k(section)f(7)g -(additional)h(terms,)f(to)h(the)e(whole)h(of)g(the)g(w)m(ork,)g(and)f -(all)i(its)f(parts,)510 3460 y(regardless)h(of)g(ho)m(w)g(they)g(are)g -(pac)m(k)-5 b(aged.)52 b(This)33 b(License)h(giv)m(es)h(no)f(p)s -(ermission)e(to)j(license)510 3570 y(the)c(w)m(ork)h(in)f(an)m(y)g -(other)h(w)m(a)m(y)-8 b(,)33 b(but)d(it)i(do)s(es)f(not)g(in)m(v)-5 -b(alidate)33 b(suc)m(h)e(p)s(ermission)f(if)h(y)m(ou)h(ha)m(v)m(e)510 -3679 y(separately)g(receiv)m(ed)f(it.)374 3814 y(d.)60 -b(If)36 b(the)h(w)m(ork)g(has)g(in)m(teractiv)m(e)j(user)c(in)m -(terfaces,)k(eac)m(h)e(m)m(ust)f(displa)m(y)g(Appropriate)g(Legal)510 -3924 y(Notices;)49 b(ho)m(w)m(ev)m(er,)c(if)c(the)h(Program)f(has)g(in) -m(teractiv)m(e)j(in)m(terfaces)e(that)g(do)f(not)h(displa)m(y)510 -4033 y(Appropriate)30 b(Legal)i(Notices,)g(y)m(our)f(w)m(ork)f(need)g -(not)h(mak)m(e)g(them)g(do)f(so.)330 4194 y(A)38 b(compilation)h(of)f -(a)g(co)m(v)m(ered)h(w)m(ork)f(with)f(other)h(separate)h(and)e(indep)s -(enden)m(t)f(w)m(orks,)k(whic)m(h)330 4303 y(are)c(not)g(b)m(y)g(their) -g(nature)f(extensions)h(of)g(the)g(co)m(v)m(ered)i(w)m(ork,)f(and)e -(whic)m(h)h(are)g(not)g(com)m(bined)330 4413 y(with)27 -b(it)i(suc)m(h)e(as)h(to)h(form)e(a)h(larger)h(program,)f(in)f(or)h(on) -g(a)g(v)m(olume)g(of)g(a)h(storage)g(or)f(distribution)330 -4522 y(medium,)43 b(is)f(called)g(an)g(\\aggregate")j(if)c(the)h -(compilation)h(and)e(its)g(resulting)h(cop)m(yrigh)m(t)h(are)330 -4632 y(not)31 b(used)f(to)h(limit)h(the)e(access)i(or)f(legal)h(righ)m -(ts)f(of)g(the)g(compilation's)h(users)e(b)s(ey)m(ond)g(what)h(the)330 -4741 y(individual)j(w)m(orks)h(p)s(ermit.)54 b(Inclusion)34 -b(of)h(a)h(co)m(v)m(ered)g(w)m(ork)f(in)g(an)g(aggregate)j(do)s(es)c -(not)h(cause)330 4851 y(this)30 b(License)h(to)g(apply)f(to)h(the)g -(other)g(parts)f(of)g(the)h(aggregate.)199 4986 y(6.)61 -b(Con)m(v)m(eying)31 b(Non-Source)g(F)-8 b(orms.)330 -5121 y(Y)g(ou)29 b(ma)m(y)h(con)m(v)m(ey)g(a)f(co)m(v)m(ered)i(w)m(ork) -e(in)f(ob)5 b(ject)30 b(co)s(de)f(form)f(under)g(the)h(terms)f(of)h -(sections)h(4)g(and)330 5230 y(5,)42 b(pro)m(vided)d(that)g(y)m(ou)h -(also)g(con)m(v)m(ey)g(the)g(mac)m(hine-readable)g(Corresp)s(onding)e -(Source)g(under)330 5340 y(the)31 b(terms)f(of)g(this)h(License,)g(in)f -(one)h(of)f(these)h(w)m(a)m(ys:)p eop end -%%Page: 5 7 -TeXDict begin 5 6 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(5)379 299 y(a.)61 b(Con)m(v)m(ey)32 b(the)f(ob)5 -b(ject)31 b(co)s(de)g(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h(a)g(ph)m -(ysical)h(pro)s(duct)d(\(including)i(a)g(ph)m(ys-)510 -408 y(ical)37 b(distribution)d(medium\),)j(accompanied)f(b)m(y)f(the)h -(Corresp)s(onding)d(Source)j(\014xed)e(on)i(a)510 518 -y(durable)30 b(ph)m(ysical)h(medium)e(customarily)i(used)f(for)g(soft)m -(w)m(are)i(in)m(terc)m(hange.)374 655 y(b.)60 b(Con)m(v)m(ey)30 -b(the)f(ob)5 b(ject)30 b(co)s(de)f(in,)g(or)g(em)m(b)s(o)s(died)f(in,)h -(a)g(ph)m(ysical)g(pro)s(duct)f(\(including)h(a)g(ph)m(ysi-)510 -765 y(cal)k(distribution)e(medium\),)h(accompanied)h(b)m(y)e(a)i -(written)f(o\013er,)g(v)-5 b(alid)33 b(for)e(at)i(least)g(three)510 -874 y(y)m(ears)i(and)f(v)-5 b(alid)35 b(for)f(as)g(long)h(as)g(y)m(ou)g -(o\013er)f(spare)h(parts)f(or)g(customer)h(supp)s(ort)d(for)i(that)510 -984 y(pro)s(duct)c(mo)s(del,)i(to)g(giv)m(e)g(an)m(y)m(one)h(who)d(p)s -(ossesses)h(the)h(ob)5 b(ject)32 b(co)s(de)f(either)h(\(1\))g(a)g(cop)m -(y)g(of)510 1093 y(the)24 b(Corresp)s(onding)e(Source)i(for)g(all)h -(the)f(soft)m(w)m(are)h(in)f(the)g(pro)s(duct)f(that)i(is)f(co)m(v)m -(ered)h(b)m(y)f(this)510 1203 y(License,)30 b(on)g(a)f(durable)g(ph)m -(ysical)h(medium)e(customarily)i(used)f(for)g(soft)m(w)m(are)i(in)m -(terc)m(hange,)510 1313 y(for)k(a)g(price)h(no)f(more)g(than)g(y)m(our) -g(reasonable)h(cost)g(of)f(ph)m(ysically)h(p)s(erforming)e(this)h(con-) -510 1422 y(v)m(eying)f(of)f(source,)g(or)g(\(2\))h(access)g(to)g(cop)m -(y)f(the)g(Corresp)s(onding)e(Source)i(from)f(a)h(net)m(w)m(ork)510 -1532 y(serv)m(er)e(at)g(no)f(c)m(harge.)384 1669 y(c.)61 -b(Con)m(v)m(ey)40 b(individual)e(copies)h(of)g(the)g(ob)5 -b(ject)40 b(co)s(de)f(with)g(a)g(cop)m(y)g(of)g(the)g(written)g -(o\013er)g(to)510 1778 y(pro)m(vide)e(the)g(Corresp)s(onding)e(Source.) -59 b(This)36 b(alternativ)m(e)k(is)c(allo)m(w)m(ed)j(only)e(o)s -(ccasionally)510 1888 y(and)29 b(noncommercially)-8 b(,)31 -b(and)e(only)g(if)h(y)m(ou)f(receiv)m(ed)i(the)e(ob)5 -b(ject)31 b(co)s(de)e(with)g(suc)m(h)g(an)g(o\013er,)510 -1998 y(in)h(accord)h(with)f(subsection)h(6b.)374 2134 -y(d.)60 b(Con)m(v)m(ey)37 b(the)f(ob)5 b(ject)37 b(co)s(de)f(b)m(y)g -(o\013ering)g(access)i(from)d(a)i(designated)f(place)h(\(gratis)g(or)f -(for)510 2244 y(a)j(c)m(harge\),)k(and)c(o\013er)g(equiv)-5 -b(alen)m(t)41 b(access)f(to)g(the)f(Corresp)s(onding)e(Source)i(in)f -(the)i(same)510 2354 y(w)m(a)m(y)30 b(through)f(the)g(same)h(place)h -(at)f(no)f(further)f(c)m(harge.)41 b(Y)-8 b(ou)30 b(need)f(not)h -(require)f(recipien)m(ts)510 2463 y(to)42 b(cop)m(y)h(the)f(Corresp)s -(onding)e(Source)h(along)i(with)f(the)g(ob)5 b(ject)42 -b(co)s(de.)75 b(If)42 b(the)f(place)i(to)510 2573 y(cop)m(y)c(the)g(ob) -5 b(ject)39 b(co)s(de)g(is)g(a)g(net)m(w)m(ork)g(serv)m(er,)i(the)e -(Corresp)s(onding)e(Source)h(ma)m(y)h(b)s(e)f(on)510 -2682 y(a)45 b(di\013eren)m(t)g(serv)m(er)f(\(op)s(erated)h(b)m(y)f(y)m -(ou)h(or)g(a)f(third)g(part)m(y\))h(that)g(supp)s(orts)d(equiv)-5 -b(alen)m(t)510 2792 y(cop)m(ying)35 b(facilities,)i(pro)m(vided)c(y)m -(ou)h(main)m(tain)h(clear)g(directions)f(next)g(to)h(the)f(ob)5 -b(ject)35 b(co)s(de)510 2902 y(sa)m(ying)h(where)f(to)h(\014nd)d(the)i -(Corresp)s(onding)f(Source.)55 b(Regardless)35 b(of)h(what)f(serv)m(er) -g(hosts)510 3011 y(the)e(Corresp)s(onding)e(Source,)j(y)m(ou)f(remain)f -(obligated)j(to)e(ensure)f(that)i(it)f(is)g(a)m(v)-5 -b(ailable)35 b(for)510 3121 y(as)c(long)g(as)f(needed)g(to)h(satisfy)g -(these)g(requiremen)m(ts.)384 3258 y(e.)61 b(Con)m(v)m(ey)24 -b(the)g(ob)5 b(ject)24 b(co)s(de)f(using)g(p)s(eer-to-p)s(eer)h -(transmission,)g(pro)m(vided)f(y)m(ou)h(inform)f(other)510 -3367 y(p)s(eers)d(where)g(the)h(ob)5 b(ject)22 b(co)s(de)f(and)f -(Corresp)s(onding)f(Source)i(of)g(the)g(w)m(ork)g(are)g(b)s(eing)g -(o\013ered)510 3477 y(to)31 b(the)g(general)g(public)f(at)h(no)f(c)m -(harge)i(under)d(subsection)h(6d.)330 3641 y(A)35 b(separable)f(p)s -(ortion)g(of)h(the)g(ob)5 b(ject)35 b(co)s(de,)h(whose)e(source)h(co)s -(de)g(is)f(excluded)g(from)g(the)h(Cor-)330 3751 y(resp)s(onding)c -(Source)h(as)h(a)g(System)f(Library)-8 b(,)33 b(need)f(not)h(b)s(e)e -(included)h(in)g(con)m(v)m(eying)i(the)f(ob)5 b(ject)330 -3861 y(co)s(de)31 b(w)m(ork.)330 3998 y(A)h(\\User)g(Pro)s(duct")f(is)h -(either)g(\(1\))g(a)g(\\consumer)g(pro)s(duct",)f(whic)m(h)h(means)f -(an)m(y)h(tangible)h(p)s(er-)330 4107 y(sonal)g(prop)s(ert)m(y)g(whic)m -(h)f(is)h(normally)h(used)e(for)h(p)s(ersonal,)g(family)-8 -b(,)35 b(or)e(household)f(purp)s(oses,)g(or)330 4217 -y(\(2\))26 b(an)m(ything)f(designed)f(or)h(sold)g(for)f(incorp)s -(oration)h(in)m(to)h(a)f(dw)m(elling.)39 b(In)24 b(determining)h -(whether)330 4326 y(a)30 b(pro)s(duct)e(is)h(a)h(consumer)f(pro)s -(duct,)f(doubtful)h(cases)h(shall)g(b)s(e)e(resolv)m(ed)j(in)e(fa)m(v)m -(or)h(of)g(co)m(v)m(erage.)330 4436 y(F)-8 b(or)42 b(a)g(particular)g -(pro)s(duct)f(receiv)m(ed)i(b)m(y)e(a)h(particular)g(user,)i -(\\normally)f(used")e(refers)g(to)i(a)330 4545 y(t)m(ypical)e(or)e -(common)h(use)e(of)i(that)g(class)g(of)f(pro)s(duct,)h(regardless)g(of) -f(the)h(status)f(of)h(the)f(par-)330 4655 y(ticular)d(user)e(or)h(of)h -(the)f(w)m(a)m(y)h(in)f(whic)m(h)f(the)i(particular)f(user)g(actually)h -(uses,)g(or)f(exp)s(ects)h(or)f(is)330 4765 y(exp)s(ected)d(to)g(use,)g -(the)g(pro)s(duct.)43 b(A)32 b(pro)s(duct)f(is)g(a)h(consumer)f(pro)s -(duct)g(regardless)h(of)g(whether)330 4874 y(the)h(pro)s(duct)f(has)h -(substan)m(tial)g(commercial,)j(industrial)c(or)h(non-consumer)g(uses,) -g(unless)f(suc)m(h)330 4984 y(uses)e(represen)m(t)g(the)h(only)f -(signi\014can)m(t)i(mo)s(de)e(of)g(use)g(of)h(the)f(pro)s(duct.)330 -5121 y(\\Installation)h(Information")e(for)g(a)g(User)g(Pro)s(duct)f -(means)g(an)m(y)i(metho)s(ds,)e(pro)s(cedures,)g(autho-)330 -5230 y(rization)d(k)m(eys,)g(or)f(other)f(information)h(required)f(to)h -(install)g(and)f(execute)i(mo)s(di\014ed)d(v)m(ersions)i(of)g(a)330 -5340 y(co)m(v)m(ered)h(w)m(ork)e(in)g(that)h(User)f(Pro)s(duct)f(from)h -(a)h(mo)s(di\014ed)e(v)m(ersion)h(of)h(its)f(Corresp)s(onding)f -(Source.)p eop end -%%Page: 6 8 -TeXDict begin 6 7 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(6)330 299 y(The)30 b(information)h(m)m(ust)f(su\016ce)g -(to)i(ensure)d(that)i(the)g(con)m(tin)m(ued)g(functioning)g(of)f(the)h -(mo)s(di\014ed)330 408 y(ob)5 b(ject)34 b(co)s(de)f(is)g(in)f(no)h -(case)h(prev)m(en)m(ted)f(or)g(in)m(terfered)g(with)g(solely)h(b)s -(ecause)f(mo)s(di\014cation)g(has)330 518 y(b)s(een)d(made.)330 -650 y(If)38 b(y)m(ou)i(con)m(v)m(ey)g(an)f(ob)5 b(ject)40 -b(co)s(de)f(w)m(ork)g(under)e(this)i(section)h(in,)h(or)e(with,)i(or)e -(sp)s(eci\014cally)g(for)330 759 y(use)g(in,)i(a)e(User)g(Pro)s(duct,)i -(and)e(the)g(con)m(v)m(eying)i(o)s(ccurs)d(as)i(part)f(of)g(a)g -(transaction)h(in)f(whic)m(h)330 869 y(the)d(righ)m(t)g(of)g(p)s -(ossession)f(and)g(use)h(of)f(the)h(User)g(Pro)s(duct)f(is)g -(transferred)g(to)i(the)e(recipien)m(t)i(in)330 978 y(p)s(erp)s(etuit)m -(y)43 b(or)g(for)g(a)h(\014xed)e(term)i(\(regardless)g(of)f(ho)m(w)h -(the)f(transaction)i(is)e(c)m(haracterized\),)330 1088 -y(the)c(Corresp)s(onding)e(Source)i(con)m(v)m(ey)m(ed)i(under)c(this)i -(section)h(m)m(ust)f(b)s(e)f(accompanied)i(b)m(y)f(the)330 -1198 y(Installation)d(Information.)52 b(But)35 b(this)f(requiremen)m(t) -g(do)s(es)g(not)h(apply)f(if)g(neither)g(y)m(ou)h(nor)f(an)m(y)330 -1307 y(third)28 b(part)m(y)i(retains)f(the)g(abilit)m(y)i(to)e(install) -h(mo)s(di\014ed)e(ob)5 b(ject)30 b(co)s(de)f(on)g(the)h(User)f(Pro)s -(duct)f(\(for)330 1417 y(example,)j(the)g(w)m(ork)f(has)g(b)s(een)g -(installed)h(in)f(R)m(OM\).)330 1548 y(The)38 b(requiremen)m(t)g(to)h -(pro)m(vide)g(Installation)g(Information)g(do)s(es)f(not)g(include)g(a) -h(requiremen)m(t)330 1658 y(to)32 b(con)m(tin)m(ue)h(to)f(pro)m(vide)g -(supp)s(ort)e(service,)j(w)m(arran)m(t)m(y)-8 b(,)33 -b(or)f(up)s(dates)e(for)i(a)g(w)m(ork)f(that)h(has)g(b)s(een)330 -1767 y(mo)s(di\014ed)37 b(or)h(installed)h(b)m(y)g(the)f(recipien)m(t,) -k(or)c(for)g(the)g(User)h(Pro)s(duct)e(in)h(whic)m(h)g(it)h(has)f(b)s -(een)330 1877 y(mo)s(di\014ed)29 b(or)h(installed.)42 -b(Access)31 b(to)g(a)g(net)m(w)m(ork)g(ma)m(y)g(b)s(e)e(denied)h(when)f -(the)i(mo)s(di\014cation)f(itself)330 1987 y(materially)i(and)e(adv)m -(ersely)h(a\013ects)h(the)e(op)s(eration)h(of)g(the)f(net)m(w)m(ork)h -(or)g(violates)h(the)f(rules)f(and)330 2096 y(proto)s(cols)h(for)f -(comm)m(unication)i(across)f(the)g(net)m(w)m(ork.)330 -2228 y(Corresp)s(onding)26 b(Source)h(con)m(v)m(ey)m(ed,)j(and)d -(Installation)i(Information)f(pro)m(vided,)g(in)f(accord)h(with)330 -2337 y(this)d(section)i(m)m(ust)e(b)s(e)g(in)g(a)h(format)g(that)f(is)h -(publicly)f(do)s(cumen)m(ted)g(\(and)g(with)g(an)h(implemen)m(ta-)330 -2447 y(tion)i(a)m(v)-5 b(ailable)29 b(to)f(the)g(public)e(in)h(source)h -(co)s(de)f(form\),)h(and)f(m)m(ust)g(require)g(no)g(sp)s(ecial)h(passw) -m(ord)330 2556 y(or)i(k)m(ey)i(for)e(unpac)m(king,)g(reading)h(or)f -(cop)m(ying.)199 2688 y(7.)61 b(Additional)31 b(T)-8 -b(erms.)330 2819 y(\\Additional)29 b(p)s(ermissions")e(are)h(terms)f -(that)h(supplemen)m(t)f(the)h(terms)g(of)f(this)h(License)g(b)m(y)g -(mak-)330 2929 y(ing)41 b(exceptions)h(from)e(one)h(or)g(more)g(of)g -(its)g(conditions.)72 b(Additional)42 b(p)s(ermissions)d(that)j(are)330 -3039 y(applicable)31 b(to)f(the)g(en)m(tire)h(Program)f(shall)g(b)s(e)f -(treated)i(as)f(though)f(they)h(w)m(ere)h(included)e(in)g(this)330 -3148 y(License,)36 b(to)e(the)g(exten)m(t)i(that)e(they)g(are)g(v)-5 -b(alid)34 b(under)f(applicable)i(la)m(w.)52 b(If)33 b(additional)i(p)s -(ermis-)330 3258 y(sions)27 b(apply)h(only)f(to)h(part)g(of)f(the)h -(Program,)h(that)f(part)f(ma)m(y)h(b)s(e)f(used)g(separately)h(under)e -(those)330 3367 y(p)s(ermissions,)31 b(but)g(the)h(en)m(tire)h(Program) -f(remains)f(go)m(v)m(erned)i(b)m(y)f(this)g(License)g(without)g(regard) -330 3477 y(to)f(the)g(additional)g(p)s(ermissions.)330 -3608 y(When)45 b(y)m(ou)g(con)m(v)m(ey)i(a)e(cop)m(y)h(of)f(a)g(co)m(v) -m(ered)i(w)m(ork,)h(y)m(ou)e(ma)m(y)f(at)h(y)m(our)f(option)g(remo)m(v) -m(e)i(an)m(y)330 3718 y(additional)30 b(p)s(ermissions)e(from)h(that)h -(cop)m(y)-8 b(,)31 b(or)f(from)e(an)m(y)i(part)f(of)h(it.)41 -b(\(Additional)30 b(p)s(ermissions)330 3828 y(ma)m(y)41 -b(b)s(e)f(written)g(to)h(require)f(their)h(o)m(wn)f(remo)m(v)-5 -b(al)42 b(in)e(certain)h(cases)g(when)f(y)m(ou)g(mo)s(dify)g(the)330 -3937 y(w)m(ork.\))48 b(Y)-8 b(ou)33 b(ma)m(y)g(place)h(additional)f(p)s -(ermissions)e(on)i(material,)i(added)d(b)m(y)g(y)m(ou)h(to)g(a)g(co)m -(v)m(ered)330 4047 y(w)m(ork,)e(for)f(whic)m(h)g(y)m(ou)h(ha)m(v)m(e)g -(or)g(can)f(giv)m(e)i(appropriate)f(cop)m(yrigh)m(t)g(p)s(ermission.) -330 4178 y(Not)m(withstanding)e(an)m(y)g(other)g(pro)m(vision)f(of)h -(this)f(License,)h(for)f(material)i(y)m(ou)f(add)f(to)h(a)f(co)m(v)m -(ered)330 4288 y(w)m(ork,)40 b(y)m(ou)e(ma)m(y)g(\(if)g(authorized)g(b) -m(y)g(the)g(cop)m(yrigh)m(t)h(holders)e(of)h(that)g(material\))h -(supplemen)m(t)330 4398 y(the)31 b(terms)f(of)g(this)h(License)g(with)f -(terms:)379 4529 y(a.)61 b(Disclaiming)31 b(w)m(arran)m(t)m(y)f(or)g -(limiting)g(liabilit)m(y)h(di\013eren)m(tly)f(from)f(the)g(terms)g(of)h -(sections)g(15)510 4639 y(and)g(16)h(of)g(this)f(License;)h(or)374 -4770 y(b.)60 b(Requiring)30 b(preserv)-5 b(ation)31 b(of)g(sp)s -(eci\014ed)f(reasonable)h(legal)i(notices)f(or)e(author)h(attributions) -510 4880 y(in)24 b(that)i(material)g(or)f(in)f(the)h(Appropriate)g -(Legal)h(Notices)h(displa)m(y)m(ed)e(b)m(y)g(w)m(orks)f(con)m(taining) -510 4989 y(it;)31 b(or)384 5121 y(c.)61 b(Prohibiting)23 -b(misrepresen)m(tation)i(of)e(the)h(origin)g(of)f(that)i(material,)h -(or)d(requiring)g(that)h(mo)s(d-)510 5230 y(i\014ed)30 -b(v)m(ersions)h(of)f(suc)m(h)g(material)i(b)s(e)e(mark)m(ed)h(in)f -(reasonable)h(w)m(a)m(ys)g(as)g(di\013eren)m(t)g(from)f(the)510 -5340 y(original)i(v)m(ersion;)f(or)p eop end -%%Page: 7 9 -TeXDict begin 7 8 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(7)374 299 y(d.)60 b(Limiting)42 b(the)f(use)g(for)g -(publicit)m(y)h(purp)s(oses)d(of)i(names)g(of)h(licensors)f(or)h -(authors)e(of)i(the)510 408 y(material;)32 b(or)384 543 -y(e.)61 b(Declining)29 b(to)f(gran)m(t)g(righ)m(ts)f(under)f(trademark) -h(la)m(w)h(for)f(use)g(of)g(some)h(trade)f(names,)h(trade-)510 -653 y(marks,)i(or)h(service)g(marks;)f(or)397 788 y(f.)60 -b(Requiring)26 b(indemni\014cation)g(of)g(licensors)h(and)f(authors)f -(of)i(that)f(material)i(b)m(y)e(an)m(y)m(one)h(who)510 -897 y(con)m(v)m(eys)45 b(the)e(material)h(\(or)g(mo)s(di\014ed)e(v)m -(ersions)h(of)h(it\))g(with)e(con)m(tractual)k(assumptions)510 -1007 y(of)40 b(liabilit)m(y)h(to)f(the)f(recipien)m(t,)k(for)c(an)m(y)h -(liabilit)m(y)h(that)f(these)g(con)m(tractual)i(assumptions)510 -1117 y(directly)31 b(imp)s(ose)f(on)g(those)h(licensors)g(and)f -(authors.)330 1277 y(All)i(other)h(non-p)s(ermissiv)m(e)e(additional)i -(terms)e(are)i(considered)e(\\further)g(restrictions")i(within)330 -1386 y(the)j(meaning)f(of)h(section)g(10.)57 b(If)35 -b(the)h(Program)f(as)h(y)m(ou)g(receiv)m(ed)g(it,)i(or)d(an)m(y)h(part) -f(of)h(it,)h(con-)330 1496 y(tains)f(a)g(notice)h(stating)g(that)f(it)g -(is)g(go)m(v)m(erned)h(b)m(y)e(this)h(License)g(along)h(with)e(a)h -(term)g(that)g(is)g(a)330 1606 y(further)24 b(restriction,)k(y)m(ou)e -(ma)m(y)g(remo)m(v)m(e)h(that)f(term.)39 b(If)26 b(a)g(license)g(do)s -(cumen)m(t)g(con)m(tains)g(a)g(further)330 1715 y(restriction)33 -b(but)f(p)s(ermits)g(relicensing)h(or)g(con)m(v)m(eying)h(under)d(this) -i(License,)g(y)m(ou)g(ma)m(y)g(add)f(to)i(a)330 1825 -y(co)m(v)m(ered)g(w)m(ork)e(material)h(go)m(v)m(erned)h(b)m(y)e(the)g -(terms)g(of)g(that)h(license)g(do)s(cumen)m(t,)g(pro)m(vided)e(that)330 -1934 y(the)g(further)e(restriction)i(do)s(es)f(not)h(surviv)m(e)f(suc)m -(h)g(relicensing)h(or)g(con)m(v)m(eying.)330 2069 y(If)f(y)m(ou)g(add)g -(terms)g(to)h(a)g(co)m(v)m(ered)h(w)m(ork)e(in)g(accord)h(with)f(this)g -(section,)i(y)m(ou)e(m)m(ust)g(place,)i(in)e(the)330 -2179 y(relev)-5 b(an)m(t)31 b(source)f(\014les,)g(a)g(statemen)m(t)h -(of)f(the)g(additional)g(terms)g(that)g(apply)f(to)i(those)f(\014les,)g -(or)g(a)330 2288 y(notice)i(indicating)f(where)f(to)h(\014nd)e(the)h -(applicable)i(terms.)330 2423 y(Additional)37 b(terms,)h(p)s(ermissiv)m -(e)e(or)h(non-p)s(ermissiv)m(e,)h(ma)m(y)f(b)s(e)e(stated)j(in)e(the)h -(form)f(of)g(a)h(sep-)330 2533 y(arately)i(written)f(license,)i(or)e -(stated)h(as)e(exceptions;)43 b(the)38 b(ab)s(o)m(v)m(e)h(requiremen)m -(ts)e(apply)g(either)330 2642 y(w)m(a)m(y)-8 b(.)199 -2777 y(8.)61 b(T)-8 b(ermination.)330 2912 y(Y)g(ou)40 -b(ma)m(y)g(not)f(propagate)i(or)e(mo)s(dify)g(a)g(co)m(v)m(ered)i(w)m -(ork)f(except)g(as)g(expressly)f(pro)m(vided)g(un-)330 -3022 y(der)d(this)h(License.)62 b(An)m(y)37 b(attempt)h(otherwise)f(to) -h(propagate)g(or)f(mo)s(dify)f(it)i(is)f(v)m(oid,)i(and)e(will)330 -3131 y(automatically)g(terminate)d(y)m(our)g(righ)m(ts)g(under)f(this)g -(License)i(\(including)e(an)m(y)h(paten)m(t)h(licenses)330 -3241 y(gran)m(ted)c(under)e(the)h(third)g(paragraph)g(of)g(section)i -(11\).)330 3376 y(Ho)m(w)m(ev)m(er,)j(if)e(y)m(ou)f(cease)i(all)f -(violation)i(of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f -(a)h(particular)330 3485 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h -(\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g -(cop)m(yrigh)m(t)h(holder)330 3595 y(explicitly)42 b(and)e(\014nally)h -(terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 -b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 3705 y(holder)34 -b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h -(reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 3814 -y(after)31 b(the)f(cessation.)330 3949 y(Moreo)m(v)m(er,)k(y)m(our)d -(license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h -(reinstated)g(p)s(ermanen)m(tly)f(if)330 4059 y(the)d(cop)m(yrigh)m(t)h -(holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g -(reasonable)h(means,)f(this)g(is)g(the)330 4168 y(\014rst)f(time)i(y)m -(ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f -(License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 -4278 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g -(violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h -(of)f(the)330 4387 y(notice.)330 4522 y(T)-8 b(ermination)28 -b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h -(terminate)h(the)e(licenses)i(of)f(parties)330 4632 y(who)38 -b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g -(under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) -330 4741 y(b)s(een)f(terminated)h(and)e(not)i(p)s(ermanen)m(tly)f -(reinstated,)j(y)m(ou)e(do)f(not)h(qualify)f(to)h(receiv)m(e)h(new)330 -4851 y(licenses)31 b(for)f(the)h(same)g(material)h(under)c(section)k -(10.)199 4986 y(9.)61 b(Acceptance)32 b(Not)g(Required)d(for)i(Ha)m -(ving)g(Copies.)330 5121 y(Y)-8 b(ou)38 b(are)g(not)g(required)f(to)h -(accept)h(this)f(License)g(in)f(order)g(to)h(receiv)m(e)i(or)e(run)e(a) -i(cop)m(y)g(of)g(the)330 5230 y(Program.)i(Ancillary)27 -b(propagation)g(of)g(a)g(co)m(v)m(ered)h(w)m(ork)e(o)s(ccurring)g -(solely)i(as)f(a)g(consequence)g(of)330 5340 y(using)i(p)s(eer-to-p)s -(eer)g(transmission)g(to)h(receiv)m(e)h(a)e(cop)m(y)h(lik)m(ewise)h(do) -s(es)d(not)i(require)e(acceptance.)p eop end -%%Page: 8 10 -TeXDict begin 8 9 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(8)330 299 y(Ho)m(w)m(ev)m(er,)28 b(nothing)c(other)g -(than)g(this)f(License)i(gran)m(ts)g(y)m(ou)f(p)s(ermission)f(to)i -(propagate)g(or)f(mo)s(dify)330 408 y(an)m(y)34 b(co)m(v)m(ered)g(w)m -(ork.)50 b(These)32 b(actions)j(infringe)e(cop)m(yrigh)m(t)h(if)f(y)m -(ou)h(do)f(not)g(accept)i(this)e(License.)330 518 y(Therefore,)f(b)m(y) -f(mo)s(difying)g(or)g(propagating)h(a)g(co)m(v)m(ered)h(w)m(ork,)f(y)m -(ou)g(indicate)g(y)m(our)g(acceptance)330 628 y(of)f(this)f(License)h -(to)g(do)f(so.)154 759 y(10.)61 b(Automatic)32 b(Licensing)f(of)f(Do)m -(wnstream)i(Recipien)m(ts.)330 891 y(Eac)m(h)39 b(time)g(y)m(ou)g(con)m -(v)m(ey)h(a)f(co)m(v)m(ered)h(w)m(ork,)h(the)d(recipien)m(t)i -(automatically)h(receiv)m(es)f(a)f(license)330 1000 y(from)e(the)h -(original)h(licensors,)h(to)f(run,)f(mo)s(dify)f(and)g(propagate)i -(that)f(w)m(ork,)i(sub)5 b(ject)38 b(to)g(this)330 1110 -y(License.)60 b(Y)-8 b(ou)38 b(are)f(not)g(resp)s(onsible)e(for)i -(enforcing)g(compliance)h(b)m(y)f(third)f(parties)h(with)f(this)330 -1219 y(License.)330 1351 y(An)43 b(\\en)m(tit)m(y)i(transaction")g(is)f -(a)f(transaction)i(transferring)e(con)m(trol)h(of)g(an)f(organization,) -49 b(or)330 1461 y(substan)m(tially)24 b(all)f(assets)g(of)g(one,)i(or) -e(sub)s(dividing)d(an)j(organization,)j(or)d(merging)g(organizations.) -330 1570 y(If)28 b(propagation)i(of)f(a)h(co)m(v)m(ered)g(w)m(ork)f -(results)g(from)f(an)h(en)m(tit)m(y)i(transaction,)f(eac)m(h)g(part)m -(y)g(to)f(that)330 1680 y(transaction)g(who)d(receiv)m(es)k(a)d(cop)m -(y)i(of)e(the)h(w)m(ork)f(also)i(receiv)m(es)g(whatev)m(er)f(licenses)g -(to)g(the)g(w)m(ork)330 1789 y(the)d(part)m(y's)g(predecessor)g(in)g -(in)m(terest)h(had)e(or)h(could)g(giv)m(e)h(under)e(the)h(previous)f -(paragraph,)i(plus)330 1899 y(a)31 b(righ)m(t)g(to)h(p)s(ossession)e -(of)h(the)g(Corresp)s(onding)e(Source)i(of)g(the)f(w)m(ork)h(from)g -(the)g(predecessor)f(in)330 2008 y(in)m(terest,)i(if)e(the)h -(predecessor)f(has)g(it)h(or)f(can)h(get)h(it)e(with)h(reasonable)g -(e\013orts.)330 2140 y(Y)-8 b(ou)36 b(ma)m(y)g(not)g(imp)s(ose)f(an)m -(y)h(further)e(restrictions)j(on)e(the)h(exercise)g(of)g(the)g(righ)m -(ts)g(gran)m(ted)g(or)330 2250 y(a\016rmed)27 b(under)f(this)h -(License.)40 b(F)-8 b(or)28 b(example,)h(y)m(ou)f(ma)m(y)g(not)g(imp)s -(ose)f(a)h(license)g(fee,)h(ro)m(y)m(alt)m(y)-8 b(,)31 -b(or)330 2359 y(other)d(c)m(harge)g(for)g(exercise)h(of)e(righ)m(ts)h -(gran)m(ted)g(under)e(this)i(License,)h(and)d(y)m(ou)i(ma)m(y)g(not)g -(initiate)330 2469 y(litigation)f(\(including)d(a)g(cross-claim)i(or)e -(coun)m(terclaim)i(in)e(a)g(la)m(wsuit\))i(alleging)g(that)e(an)m(y)h -(paten)m(t)330 2578 y(claim)j(is)g(infringed)e(b)m(y)i(making,)g -(using,)g(selling,)h(o\013ering)f(for)f(sale,)i(or)e(imp)s(orting)g -(the)h(Program)330 2688 y(or)i(an)m(y)h(p)s(ortion)f(of)h(it.)154 -2819 y(11.)61 b(P)m(aten)m(ts.)330 2951 y(A)41 b(\\con)m(tributor")h -(is)f(a)g(cop)m(yrigh)m(t)i(holder)d(who)h(authorizes)g(use)g(under)e -(this)i(License)h(of)f(the)330 3061 y(Program)35 b(or)f(a)h(w)m(ork)g -(on)f(whic)m(h)g(the)h(Program)f(is)h(based.)53 b(The)34 -b(w)m(ork)g(th)m(us)g(licensed)h(is)g(called)330 3170 -y(the)c(con)m(tributor's)f(\\con)m(tributor)i(v)m(ersion".)330 -3302 y(A)g(con)m(tributor's)g(\\essen)m(tial)i(paten)m(t)e(claims")h -(are)f(all)h(paten)m(t)f(claims)h(o)m(wned)e(or)h(con)m(trolled)h(b)m -(y)330 3411 y(the)21 b(con)m(tributor,)j(whether)d(already)g(acquired)g -(or)h(hereafter)f(acquired,)j(that)d(w)m(ould)g(b)s(e)g(infringed)330 -3521 y(b)m(y)27 b(some)h(manner,)g(p)s(ermitted)f(b)m(y)g(this)h -(License,)h(of)e(making,)i(using,)f(or)f(selling)i(its)f(con)m -(tributor)330 3630 y(v)m(ersion,)40 b(but)c(do)i(not)f(include)g -(claims)i(that)f(w)m(ould)f(b)s(e)f(infringed)h(only)g(as)h(a)g -(consequence)g(of)330 3740 y(further)33 b(mo)s(di\014cation)h(of)g(the) -g(con)m(tributor)g(v)m(ersion.)52 b(F)-8 b(or)34 b(purp)s(oses)e(of)i -(this)g(de\014nition,)h(\\con-)330 3850 y(trol")40 b(includes)f(the)g -(righ)m(t)h(to)f(gran)m(t)h(paten)m(t)g(sublicenses)f(in)g(a)g(manner)g -(consisten)m(t)h(with)f(the)330 3959 y(requiremen)m(ts)30 -b(of)h(this)f(License.)330 4091 y(Eac)m(h)44 b(con)m(tributor)h(gran)m -(ts)f(y)m(ou)g(a)h(non-exclusiv)m(e,)j(w)m(orldwide,)f(ro)m(y)m(alt)m -(y-free)g(paten)m(t)e(license)330 4200 y(under)26 b(the)h(con)m -(tributor's)g(essen)m(tial)i(paten)m(t)f(claims,)h(to)f(mak)m(e,)h -(use,)f(sell,)g(o\013er)g(for)f(sale,)i(imp)s(ort)330 -4310 y(and)h(otherwise)h(run,)e(mo)s(dify)g(and)h(propagate)i(the)e -(con)m(ten)m(ts)i(of)f(its)g(con)m(tributor)f(v)m(ersion.)330 -4441 y(In)e(the)h(follo)m(wing)h(three)e(paragraphs,)h(a)g(\\paten)m(t) -h(license")g(is)e(an)m(y)h(express)f(agreemen)m(t)j(or)d(com-)330 -4551 y(mitmen)m(t,)g(ho)m(w)m(ev)m(er)g(denominated,)f(not)f(to)h -(enforce)g(a)f(paten)m(t)i(\(suc)m(h)e(as)g(an)g(express)g(p)s -(ermission)330 4661 y(to)32 b(practice)h(a)f(paten)m(t)h(or)e(co)m(v)m -(enan)m(t)j(not)e(to)g(sue)f(for)h(paten)m(t)g(infringemen)m(t\).)45 -b(T)-8 b(o)32 b(\\gran)m(t")h(suc)m(h)330 4770 y(a)i(paten)m(t)h -(license)f(to)h(a)f(part)m(y)g(means)f(to)i(mak)m(e)f(suc)m(h)g(an)f -(agreemen)m(t)j(or)d(commitmen)m(t)i(not)f(to)330 4880 -y(enforce)c(a)g(paten)m(t)g(against)h(the)e(part)m(y)-8 -b(.)330 5011 y(If)36 b(y)m(ou)h(con)m(v)m(ey)h(a)f(co)m(v)m(ered)h(w)m -(ork,)h(kno)m(wingly)e(relying)g(on)f(a)h(paten)m(t)h(license,)h(and)d -(the)h(Corre-)330 5121 y(sp)s(onding)21 b(Source)h(of)h(the)g(w)m(ork)g -(is)f(not)h(a)m(v)-5 b(ailable)25 b(for)e(an)m(y)m(one)g(to)h(cop)m(y) --8 b(,)25 b(free)e(of)g(c)m(harge)g(and)f(under)330 5230 -y(the)32 b(terms)f(of)h(this)f(License,)i(through)e(a)h(publicly)f(a)m -(v)-5 b(ailable)34 b(net)m(w)m(ork)e(serv)m(er)g(or)g(other)g(readily) -330 5340 y(accessible)38 b(means,)g(then)e(y)m(ou)h(m)m(ust)f(either)h -(\(1\))h(cause)e(the)h(Corresp)s(onding)e(Source)h(to)h(b)s(e)f(so)p -eop end -%%Page: 9 11 -TeXDict begin 9 10 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2052 b(9)330 299 y(a)m(v)-5 b(ailable,)32 b(or)e(\(2\))g -(arrange)g(to)h(depriv)m(e)e(y)m(ourself)h(of)g(the)g(b)s(ene\014t)e -(of)i(the)g(paten)m(t)g(license)h(for)e(this)330 408 -y(particular)35 b(w)m(ork,)g(or)f(\(3\))i(arrange,)g(in)d(a)i(manner)e -(consisten)m(t)j(with)e(the)g(requiremen)m(ts)h(of)f(this)330 -518 y(License,)j(to)f(extend)g(the)f(paten)m(t)h(license)h(to)f(do)m -(wnstream)f(recipien)m(ts.)56 b(\\Kno)m(wingly)36 b(relying")330 -628 y(means)31 b(y)m(ou)h(ha)m(v)m(e)g(actual)h(kno)m(wledge)f(that,)g -(but)f(for)g(the)g(paten)m(t)i(license,)f(y)m(our)g(con)m(v)m(eying)h -(the)330 737 y(co)m(v)m(ered)40 b(w)m(ork)e(in)g(a)g(coun)m(try)-8 -b(,)41 b(or)e(y)m(our)f(recipien)m(t's)h(use)f(of)g(the)h(co)m(v)m -(ered)g(w)m(ork)g(in)e(a)i(coun)m(try)-8 b(,)330 847 -y(w)m(ould)35 b(infringe)g(one)g(or)g(more)g(iden)m(ti\014able)h(paten) -m(ts)g(in)f(that)h(coun)m(try)f(that)h(y)m(ou)f(ha)m(v)m(e)i(reason)330 -956 y(to)31 b(b)s(eliev)m(e)h(are)e(v)-5 b(alid.)330 -1121 y(If,)31 b(pursuan)m(t)e(to)j(or)e(in)h(connection)h(with)e(a)h -(single)h(transaction)g(or)f(arrangemen)m(t,)h(y)m(ou)f(con)m(v)m(ey)-8 -b(,)330 1230 y(or)35 b(propagate)h(b)m(y)e(pro)s(curing)g(con)m(v)m(ey) -m(ance)j(of,)g(a)e(co)m(v)m(ered)h(w)m(ork,)g(and)f(gran)m(t)g(a)g -(paten)m(t)h(license)330 1340 y(to)c(some)f(of)h(the)f(parties)h -(receiving)g(the)f(co)m(v)m(ered)i(w)m(ork)e(authorizing)h(them)f(to)h -(use,)g(propagate,)330 1450 y(mo)s(dify)26 b(or)h(con)m(v)m(ey)h(a)g -(sp)s(eci\014c)e(cop)m(y)i(of)f(the)g(co)m(v)m(ered)i(w)m(ork,)f(then)e -(the)h(paten)m(t)h(license)g(y)m(ou)f(gran)m(t)330 1559 -y(is)j(automatically)k(extended)c(to)h(all)g(recipien)m(ts)h(of)e(the)h -(co)m(v)m(ered)h(w)m(ork)e(and)g(w)m(orks)g(based)g(on)h(it.)330 -1724 y(A)d(paten)m(t)g(license)h(is)e(\\discriminatory")i(if)e(it)h(do) -s(es)f(not)h(include)f(within)g(the)h(scop)s(e)f(of)h(its)g(co)m(v)m -(er-)330 1833 y(age,)f(prohibits)c(the)h(exercise)h(of,)h(or)d(is)h -(conditioned)h(on)f(the)g(non-exercise)h(of)f(one)g(or)g(more)g(of)g -(the)330 1943 y(righ)m(ts)32 b(that)g(are)g(sp)s(eci\014cally)h(gran)m -(ted)f(under)e(this)i(License.)45 b(Y)-8 b(ou)32 b(ma)m(y)g(not)g(con)m -(v)m(ey)h(a)f(co)m(v)m(ered)330 2052 y(w)m(ork)d(if)g(y)m(ou)g(are)h(a) -f(part)m(y)g(to)h(an)f(arrangemen)m(t)h(with)e(a)i(third)e(part)m(y)h -(that)g(is)g(in)g(the)g(business)f(of)330 2162 y(distributing)i(soft)m -(w)m(are,)i(under)d(whic)m(h)h(y)m(ou)h(mak)m(e)g(pa)m(ymen)m(t)g(to)g -(the)g(third)f(part)m(y)g(based)g(on)h(the)330 2271 y(exten)m(t)f(of)g -(y)m(our)f(activit)m(y)i(of)e(con)m(v)m(eying)i(the)e(w)m(ork,)h(and)e -(under)g(whic)m(h)g(the)i(third)e(part)m(y)h(gran)m(ts,)330 -2381 y(to)35 b(an)m(y)g(of)f(the)h(parties)f(who)g(w)m(ould)g(receiv)m -(e)i(the)f(co)m(v)m(ered)h(w)m(ork)e(from)g(y)m(ou,)i(a)f -(discriminatory)330 2491 y(paten)m(t)g(license)h(\(a\))f(in)f -(connection)h(with)f(copies)h(of)g(the)f(co)m(v)m(ered)i(w)m(ork)f(con) -m(v)m(ey)m(ed)h(b)m(y)e(y)m(ou)h(\(or)330 2600 y(copies)k(made)e(from)h -(those)g(copies\),)j(or)d(\(b\))g(primarily)f(for)h(and)f(in)h -(connection)h(with)e(sp)s(eci\014c)330 2710 y(pro)s(ducts)32 -b(or)i(compilations)h(that)f(con)m(tain)h(the)f(co)m(v)m(ered)i(w)m -(ork,)e(unless)f(y)m(ou)h(en)m(tered)h(in)m(to)f(that)330 -2819 y(arrangemen)m(t,)e(or)e(that)h(paten)m(t)g(license)h(w)m(as)e -(gran)m(ted,)i(prior)d(to)j(28)f(Marc)m(h)g(2007.)330 -2984 y(Nothing)23 b(in)e(this)h(License)h(shall)f(b)s(e)f(construed)h -(as)g(excluding)g(or)g(limiting)h(an)m(y)f(implied)g(license)h(or)330 -3093 y(other)k(defenses)f(to)h(infringemen)m(t)g(that)g(ma)m(y)g -(otherwise)g(b)s(e)e(a)m(v)-5 b(ailable)29 b(to)e(y)m(ou)g(under)e -(applicable)330 3203 y(paten)m(t)31 b(la)m(w.)154 3367 -y(12.)61 b(No)31 b(Surrender)d(of)i(Others')g(F)-8 b(reedom.)330 -3532 y(If)24 b(conditions)g(are)h(imp)s(osed)f(on)g(y)m(ou)g(\(whether) -g(b)m(y)g(court)h(order,)g(agreemen)m(t)h(or)e(otherwise\))h(that)330 -3641 y(con)m(tradict)35 b(the)f(conditions)h(of)e(this)h(License,)h -(they)f(do)g(not)g(excuse)g(y)m(ou)g(from)g(the)f(conditions)330 -3751 y(of)k(this)f(License.)59 b(If)36 b(y)m(ou)h(cannot)g(con)m(v)m -(ey)h(a)e(co)m(v)m(ered)i(w)m(ork)f(so)g(as)f(to)h(satisfy)g(sim)m -(ultaneously)330 3861 y(y)m(our)44 b(obligations)i(under)c(this)i -(License)h(and)e(an)m(y)i(other)f(p)s(ertinen)m(t)g(obligations,)49 -b(then)44 b(as)h(a)330 3970 y(consequence)40 b(y)m(ou)f(ma)m(y)g(not)g -(con)m(v)m(ey)i(it)e(at)h(all.)67 b(F)-8 b(or)40 b(example,)i(if)d(y)m -(ou)g(agree)h(to)g(terms)e(that)330 4080 y(obligate)32 -b(y)m(ou)e(to)h(collect)h(a)f(ro)m(y)m(alt)m(y)h(for)e(further)e(con)m -(v)m(eying)k(from)e(those)g(to)h(whom)e(y)m(ou)h(con)m(v)m(ey)330 -4189 y(the)h(Program,)h(the)f(only)g(w)m(a)m(y)h(y)m(ou)g(could)f -(satisfy)g(b)s(oth)g(those)g(terms)g(and)g(this)g(License)g(w)m(ould) -330 4299 y(b)s(e)f(to)h(refrain)f(en)m(tirely)h(from)f(con)m(v)m(eying) -i(the)f(Program.)154 4463 y(13.)61 b(Use)31 b(with)f(the)g(GNU)h -(A\013ero)g(General)h(Public)e(License.)330 4628 y(Not)m(withstanding) -39 b(an)m(y)g(other)f(pro)m(vision)h(of)f(this)g(License,)k(y)m(ou)c -(ha)m(v)m(e)i(p)s(ermission)d(to)i(link)f(or)330 4737 -y(com)m(bine)h(an)m(y)g(co)m(v)m(ered)i(w)m(ork)e(with)f(a)h(w)m(ork)g -(licensed)g(under)e(v)m(ersion)i(3)g(of)g(the)g(GNU)g(A\013ero)330 -4847 y(General)29 b(Public)f(License)h(in)m(to)h(a)f(single)g(com)m -(bined)f(w)m(ork,)h(and)f(to)h(con)m(v)m(ey)h(the)f(resulting)g(w)m -(ork.)330 4956 y(The)f(terms)g(of)g(this)h(License)f(will)h(con)m(tin)m -(ue)g(to)g(apply)f(to)h(the)g(part)f(whic)m(h)g(is)g(the)h(co)m(v)m -(ered)h(w)m(ork,)330 5066 y(but)38 b(the)h(sp)s(ecial)g(requiremen)m -(ts)f(of)h(the)g(GNU)g(A\013ero)g(General)g(Public)g(License,)i -(section)f(13,)330 5176 y(concerning)31 b(in)m(teraction)h(through)e(a) -h(net)m(w)m(ork)g(will)f(apply)g(to)i(the)e(com)m(bination)i(as)e(suc)m -(h.)154 5340 y(14.)61 b(Revised)31 b(V)-8 b(ersions)30 -b(of)h(this)f(License.)p eop end -%%Page: 10 12 -TeXDict begin 10 11 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2006 b(10)330 299 y(The)35 b(F)-8 b(ree)36 b(Soft)m(w)m(are)g -(F)-8 b(oundation)36 b(ma)m(y)g(publish)d(revised)i(and/or)g(new)g(v)m -(ersions)h(of)f(the)g(GNU)330 408 y(General)f(Public)f(License)g(from)g -(time)g(to)h(time.)49 b(Suc)m(h)33 b(new)f(v)m(ersions)h(will)h(b)s(e)e -(similar)h(in)g(spirit)330 518 y(to)e(the)g(presen)m(t)f(v)m(ersion,)h -(but)f(ma)m(y)h(di\013er)f(in)g(detail)i(to)f(address)e(new)h(problems) -g(or)g(concerns.)330 662 y(Eac)m(h)37 b(v)m(ersion)g(is)f(giv)m(en)h(a) -g(distinguishing)e(v)m(ersion)i(n)m(um)m(b)s(er.)57 b(If)36 -b(the)g(Program)g(sp)s(eci\014es)g(that)330 772 y(a)31 -b(certain)h(n)m(um)m(b)s(ered)d(v)m(ersion)i(of)g(the)g(GNU)g(General)h -(Public)e(License)h(\\or)g(an)m(y)g(later)h(v)m(ersion")330 -881 y(applies)h(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f -(follo)m(wing)i(the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 -991 y(n)m(um)m(b)s(ered)h(v)m(ersion)h(or)g(of)g(an)m(y)g(later)h(v)m -(ersion)g(published)d(b)m(y)i(the)g(F)-8 b(ree)35 b(Soft)m(w)m(are)g(F) --8 b(oundation.)330 1101 y(If)28 b(the)h(Program)g(do)s(es)g(not)g(sp)s -(ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)h(the)g(GNU)g(General)h -(Public)e(License,)330 1210 y(y)m(ou)j(ma)m(y)g(c)m(ho)s(ose)g(an)m(y)g -(v)m(ersion)g(ev)m(er)g(published)d(b)m(y)j(the)f(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation.)330 1354 -y(If)39 b(the)h(Program)g(sp)s(eci\014es)f(that)h(a)g(pro)m(xy)g(can)g -(decide)g(whic)m(h)f(future)g(v)m(ersions)h(of)f(the)h(GNU)330 -1464 y(General)34 b(Public)e(License)i(can)f(b)s(e)f(used,)h(that)h -(pro)m(xy's)e(public)h(statemen)m(t)h(of)f(acceptance)j(of)d(a)330 -1573 y(v)m(ersion)e(p)s(ermanen)m(tly)f(authorizes)h(y)m(ou)g(to)g(c)m -(ho)s(ose)g(that)g(v)m(ersion)g(for)f(the)h(Program.)330 -1718 y(Later)37 b(license)g(v)m(ersions)f(ma)m(y)h(giv)m(e)g(y)m(ou)g -(additional)g(or)f(di\013eren)m(t)h(p)s(ermissions.)56 -b(Ho)m(w)m(ev)m(er,)40 b(no)330 1827 y(additional)25 -b(obligations)i(are)e(imp)s(osed)f(on)g(an)m(y)h(author)f(or)h(cop)m -(yrigh)m(t)h(holder)e(as)h(a)g(result)f(of)h(y)m(our)330 -1937 y(c)m(ho)s(osing)31 b(to)g(follo)m(w)h(a)f(later)g(v)m(ersion.)154 -2081 y(15.)61 b(Disclaimer)32 b(of)f(W)-8 b(arran)m(t)m(y)g(.)330 -2225 y(THERE)47 b(IS)f(NO)h(W)-10 b(ARRANTY)48 b(F)m(OR)f(THE)g(PR)m -(OGRAM,)h(TO)f(THE)g(EXTENT)f(PER-)330 2335 y(MITTED)g(BY)i(APPLICABLE) -e(LA)-10 b(W.)47 b(EX)m(CEPT)f(WHEN)i(OTHER)-10 b(WISE)45 -b(ST)-8 b(A)g(TED)47 b(IN)330 2444 y(WRITING)34 b(THE)f(COPYRIGHT)g -(HOLDERS)g(AND/OR)i(OTHER)e(P)-8 b(AR)g(TIES)33 b(PR)m(O)m(VIDE)330 -2554 y(THE)d(PR)m(OGRAM)i(\\AS)e(IS")h(WITHOUT)f(W)-10 -b(ARRANTY)31 b(OF)g(ANY)g(KIND,)g(EITHER)f(EX-)330 2663 -y(PRESSED)k(OR)h(IMPLIED,)g(INCLUDING,)g(BUT)h(NOT)e(LIMITED)h(TO,)f -(THE)h(IMPLIED)330 2773 y(W)-10 b(ARRANTIES)38 b(OF)g(MER)m(CHANT)-8 -b(ABILITY)39 b(AND)g(FITNESS)e(F)m(OR)i(A)f(P)-8 b(AR)g(TICULAR)330 -2883 y(PURPOSE.)39 b(THE)h(ENTIRE)f(RISK)g(AS)h(TO)f(THE)g(QUALITY)h -(AND)h(PERF)m(ORMANCE)330 2992 y(OF)29 b(THE)g(PR)m(OGRAM)h(IS)f(WITH)g -(YOU.)h(SHOULD)f(THE)g(PR)m(OGRAM)h(PR)m(O)m(VE)g(DEFEC-)330 -3102 y(TIVE,)24 b(YOU)g(ASSUME)f(THE)h(COST)f(OF)h(ALL)g(NECESSAR)-8 -b(Y)23 b(SER)-10 b(VICING,)23 b(REP)-8 b(AIR)24 b(OR)330 -3211 y(CORRECTION.)154 3356 y(16.)61 b(Limitation)32 -b(of)e(Liabilit)m(y)-8 b(.)330 3500 y(IN)26 b(NO)g(EVENT)g(UNLESS)f -(REQUIRED)h(BY)h(APPLICABLE)f(LA)-10 b(W)26 b(OR)g(A)m(GREED)h(TO)f(IN) -330 3609 y(WRITING)37 b(WILL)f(ANY)i(COPYRIGHT)e(HOLDER,)h(OR)f(ANY)h -(OTHER)f(P)-8 b(AR)g(TY)38 b(WHO)330 3719 y(MODIFIES)33 -b(AND/OR)h(CONVEYS)e(THE)h(PR)m(OGRAM)h(AS)e(PERMITTED)h(ABO)m(VE,)h -(BE)330 3829 y(LIABLE)d(TO)e(YOU)i(F)m(OR)g(D)m(AMA)m(GES,)i(INCLUDING) -e(ANY)g(GENERAL,)g(SPECIAL,)f(IN-)330 3938 y(CIDENT)-8 -b(AL)32 b(OR)f(CONSEQUENTIAL)f(D)m(AMA)m(GES)j(ARISING)f(OUT)f(OF)h -(THE)f(USE)g(OR)330 4048 y(INABILITY)47 b(TO)f(USE)g(THE)g(PR)m(OGRAM)i -(\(INCLUDING)f(BUT)g(NOT)f(LIMITED)h(TO)330 4157 y(LOSS)28 -b(OF)h(D)m(A)-8 b(T)g(A)31 b(OR)e(D)m(A)-8 b(T)g(A)31 -b(BEING)f(RENDERED)f(INA)m(CCURA)-8 b(TE)30 b(OR)e(LOSSES)g(SUS-)330 -4267 y(T)-8 b(AINED)43 b(BY)g(YOU)f(OR)g(THIRD)h(P)-8 -b(AR)g(TIES)42 b(OR)g(A)g(F)-10 b(AILURE)43 b(OF)f(THE)g(PR)m(OGRAM)330 -4376 y(TO)30 b(OPERA)-8 b(TE)29 b(WITH)i(ANY)f(OTHER)g(PR)m(OGRAMS\),)h -(EVEN)f(IF)h(SUCH)e(HOLDER)h(OR)330 4486 y(OTHER)36 b(P)-8 -b(AR)g(TY)37 b(HAS)g(BEEN)f(AD)m(VISED)i(OF)f(THE)f(POSSIBILITY)f(OF)h -(SUCH)g(D)m(AM-)330 4596 y(A)m(GES.)154 4740 y(17.)61 -b(In)m(terpretation)31 b(of)g(Sections)g(15)g(and)f(16.)330 -4884 y(If)d(the)h(disclaimer)g(of)f(w)m(arran)m(t)m(y)i(and)d -(limitation)k(of)d(liabilit)m(y)j(pro)m(vided)d(ab)s(o)m(v)m(e)h -(cannot)g(b)s(e)f(giv)m(en)330 4994 y(lo)s(cal)35 b(legal)h(e\013ect)g -(according)f(to)f(their)h(terms,)g(reviewing)f(courts)g(shall)h(apply)e -(lo)s(cal)j(la)m(w)e(that)330 5103 y(most)j(closely)i(appro)m(ximates)f -(an)f(absolute)g(w)m(aiv)m(er)i(of)e(all)g(civil)i(liabilit)m(y)f(in)f -(connection)h(with)330 5213 y(the)d(Program,)i(unless)d(a)h(w)m(arran)m -(t)m(y)h(or)f(assumption)g(of)g(liabilit)m(y)i(accompanies)f(a)g(cop)m -(y)g(of)f(the)330 5322 y(Program)c(in)f(return)f(for)h(a)h(fee.)p -eop end -%%Page: 11 13 -TeXDict begin 11 12 bop 150 -116 a Fv(GNU)31 b(GENERAL)f(PUBLIC)h -(LICENSE)2006 b(11)150 299 y Fu(END)45 b(OF)g(TERMS)f(AND)h(CONDITIONS) -150 556 y(Ho)l(w)h(to)f(Apply)f(These)h(T)-11 b(erms)45 -b(to)g(Y)-11 b(our)44 b(New)i(Programs)275 716 y Fv(If)38 -b(y)m(ou)i(dev)m(elop)g(a)f(new)g(program,)j(and)c(y)m(ou)i(w)m(an)m(t) -g(it)f(to)h(b)s(e)f(of)g(the)h(greatest)h(p)s(ossible)d(use)h(to)150 -825 y(the)i(public,)i(the)f(b)s(est)e(w)m(a)m(y)i(to)g(ac)m(hiev)m(e)h -(this)e(is)g(to)h(mak)m(e)g(it)g(free)f(soft)m(w)m(are)h(whic)m(h)f(ev) -m(ery)m(one)i(can)150 935 y(redistribute)30 b(and)g(c)m(hange)h(under)e -(these)i(terms.)275 1069 y(T)-8 b(o)29 b(do)h(so,)g(attac)m(h)h(the)f -(follo)m(wing)h(notices)f(to)h(the)e(program.)40 b(It)30 -b(is)g(safest)g(to)g(attac)m(h)h(them)f(to)g(the)150 -1179 y(start)38 b(of)g(eac)m(h)g(source)g(\014le)f(to)h(most)g -(e\013ectiv)m(ely)i(state)f(the)f(exclusion)g(of)f(w)m(arran)m(t)m(y;) -42 b(and)37 b(eac)m(h)i(\014le)150 1289 y(should)29 b(ha)m(v)m(e)j(at)f -(least)h(the)e(\\cop)m(yrigh)m(t")j(line)e(and)e(a)i(p)s(oin)m(ter)g -(to)g(where)f(the)g(full)g(notice)i(is)e(found.)390 1401 -y Fq(one)40 b(line)g(to)g(give)g(the)g(program's)h(name)f(and)g(a)g -(brief)g(idea)g(of)g(what)g(it)g(does.)390 1488 y Fp(Copyright)h(\(C\)) -f Fq(year)49 b(name)40 b(of)g(author)390 1662 y Fp(This)g(program)h(is) -f(free)g(software:)h(you)f(can)g(redistribute)i(it)e(and/or)g(modify) -390 1749 y(it)g(under)g(the)g(terms)g(of)g(the)g(GNU)g(General)h -(Public)f(License)h(as)f(published)h(by)390 1836 y(the)f(Free)g -(Software)h(Foundation,)h(either)e(version)h(3)f(of)f(the)h(License,)h -(or)f(\(at)390 1924 y(your)g(option\))h(any)f(later)g(version.)390 -2098 y(This)g(program)h(is)f(distributed)h(in)f(the)g(hope)g(that)g(it) -g(will)g(be)g(useful,)h(but)390 2185 y(WITHOUT)g(ANY)f(WARRANTY;)h -(without)g(even)f(the)g(implied)h(warranty)g(of)390 2272 -y(MERCHANTABILITY)i(or)c(FITNESS)i(FOR)f(A)g(PARTICULAR)h(PURPOSE.)80 -b(See)40 b(the)g(GNU)390 2359 y(General)h(Public)f(License)h(for)f -(more)g(details.)390 2534 y(You)g(should)g(have)h(received)g(a)e(copy)h -(of)g(the)g(GNU)g(General)h(Public)f(License)390 2621 -y(along)g(with)g(this)h(program.)80 b(If)40 b(not,)g(see)g -(http://www.gnu.org/licenses/.)275 2756 y Fv(Also)31 -b(add)e(information)i(on)f(ho)m(w)h(to)g(con)m(tact)i(y)m(ou)d(b)m(y)g -(electronic)j(and)d(pap)s(er)f(mail.)275 2890 y(If)e(the)i(program)f -(do)s(es)f(terminal)i(in)m(teraction,)i(mak)m(e)e(it)g(output)f(a)g -(short)g(notice)i(lik)m(e)f(this)f(when)f(it)150 3000 -y(starts)k(in)f(an)g(in)m(teractiv)m(e)j(mo)s(de:)390 -3112 y Fq(program)49 b Fp(Copyright)42 b(\(C\))e Fq(year)48 -b(name)41 b(of)e(author)390 3199 y Fp(This)h(program)h(comes)f(with)g -(ABSOLUTELY)i(NO)e(WARRANTY;)h(for)f(details)h(type)f(`show)g(w'.)390 -3286 y(This)g(is)g(free)g(software,)h(and)f(you)g(are)g(welcome)h(to)e -(redistribute)j(it)390 3373 y(under)e(certain)h(conditions;)h(type)e -(`show)g(c')g(for)g(details.)275 3508 y Fv(The)27 b(h)m(yp)s(othetical) -i(commands)f(`)p Fr(show)h(w)p Fv(')f(and)f(`)p Fr(show)j(c)p -Fv(')d(should)g(sho)m(w)h(the)g(appropriate)g(parts)g(of)150 -3617 y(the)i(General)h(Public)f(License.)41 b(Of)30 b(course,)h(y)m -(our)f(program's)g(commands)f(migh)m(t)i(b)s(e)f(di\013eren)m(t;)h(for) -f(a)150 3727 y(GUI)h(in)m(terface,)h(y)m(ou)f(w)m(ould)f(use)g(an)g -(\\ab)s(out)h(b)s(o)m(x".)275 3861 y(Y)-8 b(ou)34 b(should)f(also)i -(get)g(y)m(our)e(emplo)m(y)m(er)i(\(if)g(y)m(ou)f(w)m(ork)g(as)g(a)g -(programmer\))g(or)g(sc)m(ho)s(ol,)i(if)d(an)m(y)-8 b(,)36 -b(to)150 3971 y(sign)d(a)g(\\cop)m(yrigh)m(t)h(disclaimer")g(for)e(the) -h(program,)g(if)f(necessary)-8 b(.)48 b(F)-8 b(or)34 -b(more)e(information)h(on)g(this,)150 4081 y(and)d(ho)m(w)g(to)h(apply) -f(and)g(follo)m(w)i(the)e(GNU)h(GPL,)g(see)g Fr -(http://www.gnu.org/licen)o(ses)o(/)p Fv(.)275 4215 y(The)44 -b(GNU)h(General)g(Public)f(License)i(do)s(es)e(not)h(p)s(ermit)e -(incorp)s(orating)i(y)m(our)g(program)f(in)m(to)150 4325 -y(proprietary)35 b(programs.)57 b(If)35 b(y)m(our)h(program)f(is)h(a)g -(subroutine)f(library)-8 b(,)37 b(y)m(ou)f(ma)m(y)h(consider)e(it)i -(more)150 4434 y(useful)30 b(to)i(p)s(ermit)e(linking)i(proprietary)e -(applications)i(with)f(the)g(library)-8 b(.)43 b(If)31 -b(this)g(is)g(what)g(y)m(ou)g(w)m(an)m(t)150 4544 y(to)f(do,)g(use)f -(the)g(GNU)h(Lesser)g(General)g(Public)f(License)h(instead)g(of)f(this) -h(License.)40 b(But)30 b(\014rst,)f(please)150 4653 y(read)h -Fr(http://www.gnu.org/philos)o(ophy)o(/why)o(-no)o(t-lg)o(pl.h)o(tml)o -Fv(.)p eop end -%%Page: 12 14 -TeXDict begin 12 13 bop 150 -116 a Fv(Con)m(tributors)30 -b(to)h(GNU)g Fr(gperf)e Fv(Utilit)m(y)2094 b(12)150 299 -y Fs(Con)l(tributors)50 b(to)j(GNU)h Fo(gperf)f Fs(Utilit)l(y)225 -533 y Ft(\017)60 b Fv(The)45 b(GNU)h Fr(gperf)d Fv(p)s(erfect)j(hash)e -(function)h(generator)i(utilit)m(y)f(w)m(as)g(written)f(in)g(GNU)h(C)p -Fr(++)330 643 y Fv(b)m(y)e(Douglas)i(C.)f(Sc)m(hmidt.)83 -b(The)44 b(general)i(idea)f(for)f(the)h(p)s(erfect)g(hash)e(function)i -(generator)330 752 y(w)m(as)34 b(inspired)e(b)m(y)h(Keith)g(Bostic's)j -(algorithm)e(written)f(in)g(C,)g(and)g(distributed)f(to)i(net.sources) -330 862 y(around)42 b(1984.)79 b(The)42 b(curren)m(t)g(program)h(is)g -(a)g(hea)m(vily)h(mo)s(di\014ed,)g(enhanced,)i(and)c(extended)330 -971 y(implemen)m(tation)d(of)e(Keith's)g(basic)h(idea,)h(created)f(at)g -(the)f(Univ)m(ersit)m(y)h(of)g(California,)h(Irvine.)330 -1081 y(Bugs,)31 b(patc)m(hes,)g(and)f(suggestions)h(should)f(b)s(e)f -(rep)s(orted)h(to)h Fr(<bug-gnu-gperf@gnu.org>)p Fv(.)225 -1215 y Ft(\017)60 b Fv(Sp)s(ecial)33 b(thanks)g(is)g(extended)g(to)h -(Mic)m(hael)h(Tiemann)e(and)g(Doug)h(Lea,)g(for)f(pro)m(viding)g(a)h -(useful)330 1325 y(compiler,)d(and)f(for)g(giving)h(me)g(a)g(forum)e -(to)i(exhibit)g(m)m(y)f(creation.)330 1460 y(In)22 b(addition,)i(Adam)f -(de)f(Bo)s(or)h(and)f(Nels)i(Olson)e(pro)m(vided)g(man)m(y)h(tips)f -(and)g(insigh)m(ts)h(that)g(greatly)330 1569 y(help)s(ed)29 -b(impro)m(v)m(e)j(the)e(qualit)m(y)i(and)e(functionalit)m(y)h(of)g -Fr(gperf)p Fv(.)225 1704 y Ft(\017)60 b Fv(Bruno)26 b(Haible)i -(enhanced)f(and)f(optimized)i(the)f(searc)m(h)h(algorithm.)41 -b(He)27 b(also)h(rewrote)g(the)f(input)330 1813 y(routines)j(and)g(the) -h(output)f(routines)g(for)g(b)s(etter)g(reliabilit)m(y)-8 -b(,)33 b(and)d(added)g(a)h(testsuite.)p eop end -%%Page: 13 15 -TeXDict begin 13 14 bop 150 -116 a Fv(Chapter)30 b(1:)41 -b(In)m(tro)s(duction)2546 b(13)150 299 y Fs(1)80 b(In)l(tro)t(duction) -275 533 y Fr(gperf)31 b Fv(is)j(a)f(p)s(erfect)h(hash)e(function)h -(generator)i(written)e(in)g(C)p Fr(++)p Fv(.)49 b(It)33 -b(transforms)g(an)g Fn(n)f Fv(elemen)m(t)150 643 y(user-sp)s(eci\014ed) -k(k)m(eyw)m(ord)i(set)g Fn(W)49 b Fv(in)m(to)39 b(a)e(p)s(erfect)h -(hash)e(function)h Fn(F)p Fv(.)h Fn(F)44 b Fv(uniquely)37 -b(maps)g(k)m(eyw)m(ords)150 752 y(in)e Fn(W)47 b Fv(on)m(to)36 -b(the)f(range)g(0..)p Fn(k)p Fv(,)j(where)c Fn(k)40 b -Fr(>)p Fv(=)35 b Fn(n-1)p Fv(.)54 b(If)35 b Fn(k)40 b -Fv(=)35 b Fn(n-1)42 b Fv(then)35 b Fn(F)42 b Fv(is)35 -b(a)g Fm(minimal)46 b Fv(p)s(erfect)35 b(hash)150 862 -y(function.)68 b Fr(gperf)39 b Fv(generates)i(a)f(0..)p -Fn(k)46 b Fv(elemen)m(t)41 b(static)g(lo)s(okup)f(table)g(and)f(a)i -(pair)e(of)h(C)f(functions.)150 971 y(These)34 b(functions)g(determine) -h(whether)e(a)i(giv)m(en)g(c)m(haracter)h(string)f Fn(s)j -Fv(o)s(ccurs)c(in)g Fn(W)p Fv(,)h(using)e(at)j(most)150 -1081 y(one)31 b(prob)s(e)e(in)m(to)i(the)g(lo)s(okup)f(table.)275 -1215 y Fr(gperf)22 b Fv(curren)m(tly)h(generates)j(the)d(reserv)m(ed)h -(k)m(eyw)m(ord)g(recognizer)i(for)d(lexical)j(analyzers)e(in)g(sev)m -(eral)150 1325 y(pro)s(duction)30 b(and)g(researc)m(h)h(compilers)g -(and)g(language)h(pro)s(cessing)e(to)s(ols,)i(including)e(GNU)i(C,)e -(GNU)150 1435 y(C)p Fr(++)p Fv(,)24 b(GNU)f(Ja)m(v)-5 -b(a,)26 b(GNU)d(P)m(ascal,)j(GNU)e(Mo)s(dula)f(3,)i(and)d(GNU)h(inden)m -(t.)38 b(Complete)24 b(C)p Fr(++)e Fv(source)h(co)s(de)150 -1544 y(for)42 b Fr(gperf)f Fv(is)h(a)m(v)-5 b(ailable)44 -b(from)e Fr(http://ftp.gnu.org/pub/g)o(nu/g)o(perf)o(/)p -Fv(.)70 b(A)42 b(pap)s(er)f(describing)150 1654 y Fr(gperf)p -Fv('s)d(design)i(and)f(implemen)m(tation)j(in)d(greater)i(detail)g(is)f -(a)m(v)-5 b(ailable)42 b(in)e(the)g(Second)f(USENIX)150 -1763 y(C)p Fr(++)29 b Fv(Conference)g(pro)s(ceedings)h(or)g(from)f -Fr(http://www.cs.wustl.edu)o(/~sc)o(hmid)o(t/r)o(esum)o(e.ht)o(ml)p -Fv(.)p eop end -%%Page: 14 16 -TeXDict begin 14 15 bop 150 -116 a Fv(Chapter)30 b(2:)41 -b(Static)32 b(searc)m(h)f(structures)e(and)h(GNU)h Fr(gperf)1425 -b Fv(14)150 299 y Fs(2)80 b(Static)53 b(searc)l(h)g(structures)e(and)j -(GNU)f Fo(gperf)275 533 y Fv(A)24 b Fn(static)i(searc)m(h)f(structure)k -Fv(is)c(an)f(Abstract)h(Data)i(T)m(yp)s(e)c(with)i(certain)g(fundamen)m -(tal)f(op)s(erations,)150 643 y(e.g.,)32 b Fm(initialize)p -Fv(,)g Fm(insert)p Fv(,)f(and)f Fm(r)-5 b(etrieve)p Fv(.)42 -b(Conceptually)-8 b(,)32 b(all)g(insertions)f(o)s(ccur)f(b)s(efore)h -(an)m(y)g(retriev)-5 b(als.)150 752 y(In)20 b(practice,)25 -b Fr(gperf)19 b Fv(generates)k(a)e Fm(static)27 b Fv(arra)m(y)22 -b(con)m(taining)g(searc)m(h)g(set)f(k)m(eyw)m(ords)h(and)e(an)m(y)h -(asso)s(ciated)150 862 y(attributes)37 b(sp)s(eci\014ed)f(b)m(y)h(the)f -(user.)59 b(Th)m(us,)37 b(there)g(is)g(essen)m(tially)h(no)f -(execution-time)i(cost)e(for)g(the)150 971 y(insertions.)j(It)27 -b(is)g(a)g(useful)g(data)g(structure)g(for)g(represen)m(ting)g -Fm(static)j(se)-5 b(ar)g(ch)32 b(sets)p Fv(.)40 b(Static)28 -b(searc)m(h)g(sets)150 1081 y(o)s(ccur)c(frequen)m(tly)h(in)f(soft)m(w) -m(are)i(system)e(applications.)40 b(T)m(ypical)25 b(static)h(searc)m(h) -f(sets)g(include)f(compiler)150 1191 y(reserv)m(ed)42 -b(w)m(ords,)j(assem)m(bler)e(instruction)f(op)s(co)s(des,)j(and)c -(built-in)h(shell)h(in)m(terpreter)f(commands.)150 1300 -y(Searc)m(h)g(set)g(mem)m(b)s(ers,)h(called)g Fn(k)m(eyw)m(ords)p -Fv(,)i(are)c(inserted)h(in)m(to)g(the)g(structure)f(only)g(once,)k -(usually)150 1410 y(during)29 b(program)h(initialization,)k(and)c(are)g -(not)h(generally)h(mo)s(di\014ed)d(at)i(run-time.)275 -1544 y(Numerous)c(static)i(searc)m(h)g(structure)e(implemen)m(tations)i -(exist,)h(e.g.,)f(arra)m(ys,)g(link)m(ed)g(lists,)g(binary)150 -1654 y(searc)m(h)45 b(trees,)j(digital)d(searc)m(h)g(tries,)j(and)43 -b(hash)g(tables.)83 b(Di\013eren)m(t)45 b(approac)m(hes)g(o\013er)f -(trade-o\013s)150 1763 y(b)s(et)m(w)m(een)e(space)h(utilization)g(and)f -(searc)m(h)g(time)g(e\016ciency)-8 b(.)77 b(F)-8 b(or)42 -b(example,)k(an)41 b Fn(n)h Fv(elemen)m(t)h(sorted)150 -1873 y(arra)m(y)d(is)g(space)h(e\016cien)m(t,)i(though)d(the)g(a)m(v)m -(erage-case)k(time)c(complexit)m(y)i(for)e(retriev)-5 -b(al)41 b(op)s(erations)150 1983 y(using)31 b(binary)f(searc)m(h)i(is)f -(prop)s(ortional)g(to)g(log)i Fn(n)p Fv(.)42 b(Con)m(v)m(ersely)-8 -b(,)33 b(hash)d(table)i(implemen)m(tations)h(often)150 -2092 y(lo)s(cate)27 b(a)f(table)g(en)m(try)g(in)f(constan)m(t)i(time,)g -(but)e(t)m(ypically)i(imp)s(ose)e(additional)i(memory)e(o)m(v)m(erhead) -i(and)150 2202 y(exhibit)k(p)s(o)s(or)e(w)m(orst)i(case)g(p)s -(erformance.)275 2336 y Fm(Minimal)26 b(p)-5 b(erfe)g(ct)28 -b(hash)f(functions)32 b Fv(pro)m(vide)24 b(an)f(optimal)i(solution)f -(for)f(a)h(particular)g(class)h(of)e(static)150 2446 -y(searc)m(h)31 b(sets.)41 b(A)31 b(minimal)f(p)s(erfect)g(hash)g -(function)g(is)h(de\014ned)e(b)m(y)h(t)m(w)m(o)i(prop)s(erties:)225 -2580 y Ft(\017)60 b Fv(It)34 b(allo)m(ws)i(k)m(eyw)m(ord)f(recognition) -h(in)e(a)h(static)h(searc)m(h)f(set)g(using)f(at)h(most)g -Fm(one)41 b Fv(prob)s(e)33 b(in)m(to)j(the)330 2690 y(hash)30 -b(table.)41 b(This)30 b(represen)m(ts)g(the)h(\\p)s(erfect")g(prop)s -(ert)m(y)-8 b(.)225 2824 y Ft(\017)60 b Fv(The)35 b(actual)j(memory)e -(allo)s(cated)i(to)e(store)h(the)f(k)m(eyw)m(ords)h(is)f(precisely)g -(large)h(enough)f(for)g(the)330 2934 y(k)m(eyw)m(ord)31 -b(set,)g(and)f Fm(no)j(lar)-5 b(ger)p Fv(.)42 b(This)29 -b(is)i(the)f(\\minimal")i(prop)s(ert)m(y)-8 b(.)275 3093 -y(F)g(or)38 b(most)g(applications)h(it)f(is)g(far)f(easier)i(to)f -(generate)h Fm(p)-5 b(erfe)g(ct)47 b Fv(hash)37 b(functions)g(than)h -Fm(minimal)150 3203 y(p)-5 b(erfe)g(ct)47 b Fv(hash)36 -b(functions.)60 b(Moreo)m(v)m(er,)41 b(non-minimal)c(p)s(erfect)g(hash) -f(functions)g(frequen)m(tly)i(execute)150 3313 y(faster)44 -b(than)g(minimal)g(ones)g(in)f(practice.)83 b(This)43 -b(phenomena)g(o)s(ccurs)g(since)h(searc)m(hing)h(a)f(sparse)150 -3422 y(k)m(eyw)m(ord)34 b(table)g(increases)g(the)g(probabilit)m(y)f -(of)h(lo)s(cating)h(a)e(\\n)m(ull")i(en)m(try)-8 b(,)35 -b(thereb)m(y)e(reducing)g(string)150 3532 y(comparisons.)56 -b Fr(gperf)p Fv('s)34 b(default)h(b)s(eha)m(vior)g(generates)i -Fm(ne)-5 b(ar-minimal)47 b Fv(p)s(erfect)35 b(hash)f(functions)h(for) -150 3641 y(k)m(eyw)m(ord)40 b(sets.)68 b(Ho)m(w)m(ev)m(er,)44 -b Fr(gperf)39 b Fv(pro)m(vides)g(man)m(y)h(options)f(that)h(p)s(ermit)f -(user)g(con)m(trol)i(o)m(v)m(er)g(the)150 3751 y(degree)31 -b(of)g(minimalit)m(y)g(and)f(p)s(erfection.)275 3885 -y(Static)37 b(searc)m(h)f(sets)g(often)g(exhibit)g(relativ)m(e)i -(stabilit)m(y)f(o)m(v)m(er)g(time.)58 b(F)-8 b(or)36 -b(example,)i(Ada's)e(63)h(re-)150 3995 y(serv)m(ed)31 -b(w)m(ords)f(ha)m(v)m(e)i(remained)e(constan)m(t)i(for)f(nearly)g(a)g -(decade.)42 b(It)31 b(is)g(therefore)g(frequen)m(tly)g(w)m(orth-)150 -4105 y(while)22 b(to)h(exp)s(end)e(concerted)i(e\013ort)g(building)e -(an)h(optimal)i(searc)m(h)e(structure)g Fm(onc)-5 b(e)p -Fv(,)25 b(if)d(it)g(subsequen)m(tly)150 4214 y(receiv)m(es)j(hea)m(vy)f -(use)e(m)m(ultiple)i(times.)39 b Fr(gperf)22 b Fv(remo)m(v)m(es)i(the)f -(drudgery)f(asso)s(ciated)j(with)d(constructing)150 4324 -y(time-)38 b(and)f(space-e\016cien)m(t)j(searc)m(h)d(structures)g(b)m -(y)g(hand.)61 b(It)37 b(has)g(pro)m(v)m(en)h(a)f(useful)g(and)f -(practical)150 4433 y(to)s(ol)29 b(for)f(serious)g(programming)g(pro)5 -b(jects.)40 b(Output)27 b(from)h Fr(gperf)e Fv(is)i(curren)m(tly)h -(used)e(in)h(sev)m(eral)h(pro-)150 4543 y(duction)d(and)e(researc)m(h)j -(compilers,)g(including)e(GNU)h(C,)g(GNU)g(C)p Fr(++)p -Fv(,)g(GNU)g(Ja)m(v)-5 b(a,)28 b(GNU)e(P)m(ascal,)j(and)150 -4653 y(GNU)38 b(Mo)s(dula)f(3.)63 b(The)36 b(latter)j(t)m(w)m(o)g -(compilers)f(are)f(not)h(y)m(et)h(part)e(of)g(the)h(o\016cial)h(GNU)f -(distribu-)150 4762 y(tion.)51 b(Eac)m(h)34 b(compiler)g(utilizes)h -Fr(gperf)d Fv(to)i(automatically)i(generate)f(static)g(searc)m(h)f -(structures)f(that)150 4872 y(e\016cien)m(tly)f(iden)m(tify)f(their)f -(resp)s(ectiv)m(e)i(reserv)m(ed)e(k)m(eyw)m(ords.)p eop -end -%%Page: 15 17 -TeXDict begin 15 16 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(15)150 299 y Fs(3)80 b(High-Lev)l(el)52 b(Description)f(of)j(GNU)g -Fo(gperf)275 555 y Fv(The)29 b(p)s(erfect)h(hash)g(function)g -(generator)h Fr(gperf)e Fv(reads)h(a)h(set)g(of)f(\\k)m(eyw)m(ords")i -(from)d(an)i(input)e(\014le)150 664 y(\(or)34 b(from)g(the)g(standard)f -(input)g(b)m(y)h(default\).)52 b(It)34 b(attempts)h(to)f(deriv)m(e)h(a) -f(p)s(erfect)g(hashing)f(function)150 774 y(that)k(recognizes)i(a)e -(mem)m(b)s(er)f(of)h(the)g Fn(static)h(k)m(eyw)m(ord)f(set)j -Fv(with)c(at)i(most)f(a)g(single)g(prob)s(e)f(in)m(to)i(the)150 -884 y(lo)s(okup)26 b(table.)41 b(If)26 b Fr(gperf)f Fv(succeeds)i(in)g -(generating)h(suc)m(h)e(a)h(function)f(it)i(pro)s(duces)d(a)i(pair)g -(of)f(C)h(source)150 993 y(co)s(de)39 b(routines)g(that)h(p)s(erform)d -(hashing)i(and)f(table)i(lo)s(okup)e(recognition.)69 -b(All)39 b(generated)h(C)f(co)s(de)150 1103 y(is)f(directed)g(to)g(the) -g(standard)f(output.)62 b(Command-line)38 b(options)g(describ)s(ed)e(b) -s(elo)m(w)i(allo)m(w)h(y)m(ou)f(to)150 1212 y(mo)s(dify)30 -b(the)g(input)g(and)f(output)h(format)h(to)g Fr(gperf)p -Fv(.)275 1354 y(By)23 b(default,)i Fr(gperf)d Fv(attempts)i(to)g(pro)s -(duce)e(time-e\016cien)m(t)k(co)s(de,)f(with)e(less)h(emphasis)e(on)h -(e\016cien)m(t)150 1464 y(space)31 b(utilization.)43 -b(Ho)m(w)m(ev)m(er,)33 b(sev)m(eral)e(options)g(exist)g(that)g(p)s -(ermit)f(trading-o\013)h(execution)h(time)f(for)150 1573 -y(storage)i(space)f(and)g(vice)g(v)m(ersa.)46 b(In)31 -b(particular,)h(expanding)f(the)h(generated)h(table)g(size)f(pro)s -(duces)f(a)150 1683 y(sparse)26 b(searc)m(h)g(structure,)h(generally)g -(yielding)f(faster)h(searc)m(hes.)40 b(Con)m(v)m(ersely)-8 -b(,)28 b(y)m(ou)f(can)f(direct)g Fr(gperf)150 1793 y -Fv(to)21 b(utilize)h(a)f(C)f Fr(switch)f Fv(statemen)m(t)k(sc)m(heme)e -(that)g(minimizes)g(data)g(space)g(storage)h(size.)39 -b(F)-8 b(urthermore,)150 1902 y(using)40 b(a)g(C)g Fr(switch)e -Fv(ma)m(y)i(actually)i(sp)s(eed)d(up)g(the)h(k)m(eyw)m(ord)h(retriev)-5 -b(al)41 b(time)g(somewhat.)70 b(Actual)150 2012 y(results)30 -b(dep)s(end)f(on)h(y)m(our)g(C)g(compiler,)i(of)e(course.)275 -2154 y(In)44 b(general,)50 b Fr(gperf)44 b Fv(assigns)h(v)-5 -b(alues)46 b(to)g(the)f(b)m(ytes)h(it)g(is)f(using)g(for)g(hashing)f -(un)m(til)i(some)f(set)150 2263 y(of)d(v)-5 b(alues)43 -b(giv)m(es)g(eac)m(h)h(k)m(eyw)m(ord)e(a)h(unique)e(v)-5 -b(alue.)77 b(A)42 b(helpful)f(heuristic)i(is)f(that)h(the)f(larger)h -(the)150 2373 y(hash)36 b(v)-5 b(alue)37 b(range,)i(the)e(easier)h(it)f -(is)g(for)f Fr(gperf)f Fv(to)j(\014nd)d(and)h(generate)i(a)f(p)s -(erfect)g(hash)f(function.)150 2482 y(Exp)s(erimen)m(tation)31 -b(is)f(the)h(k)m(ey)g(to)g(getting)h(the)f(most)g(from)e -Fr(gperf)p Fv(.)150 2726 y Fu(3.1)68 b(Input)44 b(F)-11 -b(ormat)46 b(to)f Fl(gperf)275 2885 y Fv(Y)-8 b(ou)38 -b(can)g(con)m(trol)i(the)e(input)f(\014le)h(format)g(b)m(y)g(v)-5 -b(arying)38 b(certain)g(command-line)h(argumen)m(ts,)h(in)150 -2995 y(particular)f(the)g(`)p Fr(-t)p Fv(')g(option.)66 -b(The)38 b(input's)g(app)s(earance)h(is)g(similar)g(to)g(GNU)h -(utilities)g Fr(flex)e Fv(and)150 3104 y Fr(bison)29 -b Fv(\(or)i(UNIX)f(utilities)i Fr(lex)e Fv(and)f Fr(yacc)p -Fv(\).)40 b(Here's)31 b(an)g(outline)g(of)f(the)h(general)g(format:)390 -3246 y Fr(declarations)390 3356 y(\045\045)390 3465 y(keywords)390 -3575 y(\045\045)390 3684 y(functions)275 3826 y Fm(Unlike)41 -b Fr(flex)35 b Fv(or)g Fr(bison)p Fv(,)h(the)g(declarations)g(section)h -(and)e(the)h(functions)f(section)i(are)f(optional.)150 -3936 y(The)30 b(follo)m(wing)i(sections)f(describ)s(e)f(the)g(input)g -(format)h(for)f(eac)m(h)h(section.)275 4078 y(It)h(is)g(p)s(ossible)g -(to)h(omit)g(the)g(declaration)h(section)f(en)m(tirely)-8 -b(,)35 b(if)d(the)h(`)p Fr(-t)p Fv(')f(option)h(is)f(not)h(giv)m(en.)48 -b(In)150 4187 y(this)30 b(case)i(the)e(input)g(\014le)g(b)s(egins)g -(directly)h(with)f(the)h(\014rst)e(k)m(eyw)m(ord)i(line,)g(e.g.:)390 -4329 y Fr(january)390 4439 y(february)390 4548 y(march)390 -4658 y(april)390 4767 y(...)150 4974 y Fk(3.1.1)63 b(Declarations)275 -5121 y Fv(The)33 b(k)m(eyw)m(ord)i(input)f(\014le)g(optionally)i(con)m -(tains)g(a)f(section)g(for)f(including)g(arbitrary)h(C)f(declara-)150 -5230 y(tions)d(and)e(de\014nitions,)h Fr(gperf)f Fv(declarations)j -(that)f(act)g(lik)m(e)h(command-line)f(options,)g(as)f(w)m(ell)i(as)e -(for)150 5340 y(pro)m(viding)g(a)h(user-supplied)e Fr(struct)p -Fv(.)p eop end -%%Page: 16 18 -TeXDict begin 16 17 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(16)150 299 y Fk(3.1.1.1)63 b(User-supplied)43 b -Fj(struct)275 446 y Fv(If)24 b(the)h(`)p Fr(-t)p Fv(')f(option)h(\(or,) -i(equiv)-5 b(alen)m(tly)d(,)28 b(the)d(`)p Fr(\045struct-type)p -Fv(')d(declaration\))k Fm(is)32 b Fv(enabled,)26 b(y)m(ou)f -Fm(must)150 555 y Fv(pro)m(vide)37 b(a)f(C)h Fr(struct)d -Fv(as)j(the)g(last)g(comp)s(onen)m(t)g(in)f(the)h(declaration)h -(section)f(from)f(the)h(input)f(\014le.)150 665 y(The)26 -b(\014rst)f(\014eld)h(in)g(this)g(struct)g(m)m(ust)g(b)s(e)g(of)g(t)m -(yp)s(e)g Fr(char)j(*)d Fv(or)g Fr(const)j(char)h(*)25 -b Fv(if)h(the)h(`)p Fr(-P)p Fv(')f(option)g(is)h(not)150 -775 y(giv)m(en,)k(or)g(of)f(t)m(yp)s(e)g Fr(int)g Fv(if)g(the)g(option) -h(`)p Fr(-P)p Fv(')f(\(or,)h(equiv)-5 b(alen)m(tly)d(,)32 -b(the)f(`)p Fr(\045pic)p Fv(')e(declaration\))j(is)f(enabled.)150 -884 y(This)k(\014rst)f(\014eld)h(m)m(ust)h(b)s(e)e(called)j(`)p -Fr(name)p Fv(',)f(although)g(it)g(is)g(p)s(ossible)f(to)h(mo)s(dify)e -(its)i(name)g(with)f(the)150 994 y(`)p Fr(-K)p Fv(')30 -b(option)h(\(or,)g(equiv)-5 b(alen)m(tly)d(,)33 b(the)d(`)p -Fr(\045define)f(slot-name)p Fv(')f(declaration\))k(describ)s(ed)e(b)s -(elo)m(w.)275 1139 y(Here)g(is)h(a)g(simple)f(example,)h(using)f(mon)m -(ths)g(of)h(the)f(y)m(ear)i(and)d(their)i(attributes)g(as)f(input:)390 -1284 y Fr(struct)46 b(month)g({)i(char)f(*name;)f(int)h(number;)e(int)i -(days;)g(int)g(leap_days;)e(};)390 1393 y(\045\045)390 -1503 y(january,)141 b(1,)47 b(31,)g(31)390 1612 y(february,)93 -b(2,)47 b(28,)g(29)390 1722 y(march,)237 b(3,)47 b(31,)g(31)390 -1832 y(april,)237 b(4,)47 b(30,)g(30)390 1941 y(may,)333 -b(5,)47 b(31,)g(31)390 2051 y(june,)285 b(6,)47 b(30,)g(30)390 -2160 y(july,)285 b(7,)47 b(31,)g(31)390 2270 y(august,)189 -b(8,)47 b(31,)g(31)390 2380 y(september,)e(9,)i(30,)g(30)390 -2489 y(october,)93 b(10,)47 b(31,)g(31)390 2599 y(november,)e(11,)i -(30,)g(30)390 2708 y(december,)e(12,)i(31,)g(31)275 2853 -y Fv(Separating)25 b(the)g Fr(struct)f Fv(declaration)i(from)f(the)g -(list)h(of)f(k)m(eyw)m(ords)h(and)e(other)h(\014elds)g(are)g(a)h(pair)f -(of)150 2963 y(consecutiv)m(e)33 b(p)s(ercen)m(t)f(signs,)f(`)p -Fr(\045\045)p Fv(',)h(app)s(earing)f(left)h(justi\014ed)e(in)h(the)h -(\014rst)e(column,)i(as)f(in)g(the)h(UNIX)150 3072 y(utilit)m(y)g -Fr(lex)p Fv(.)275 3217 y(If)k(the)i Fr(struct)d Fv(has)i(already)h(b)s -(een)f(declared)h(in)f(an)g(include)g(\014le,)i(it)f(can)g(b)s(e)e(men) -m(tioned)i(in)f(an)150 3327 y(abbreviated)31 b(form,)f(lik)m(e)i(this:) -390 3472 y Fr(struct)46 b(month;)390 3581 y(\045\045)390 -3691 y(january,)141 b(1,)47 b(31,)g(31)390 3801 y(...)150 -4010 y Fk(3.1.1.2)63 b(Gp)s(erf)43 b(Declarations)275 -4157 y Fv(The)31 b(declaration)j(section)g(can)e(con)m(tain)i -Fr(gperf)c Fv(declarations.)48 b(They)32 b(in\015uence)g(the)g(w)m(a)m -(y)h Fr(gperf)150 4267 y Fv(w)m(orks,)43 b(lik)m(e)f(command)f(line)g -(options)g(do.)72 b(In)40 b(fact,)k(ev)m(ery)e(suc)m(h)e(declaration)i -(is)f(equiv)-5 b(alen)m(t)42 b(to)g(a)150 4376 y(command)30 -b(line)h(option.)41 b(There)30 b(are)h(three)f(forms)g(of)h -(declarations:)199 4521 y(1.)61 b(Declarations)33 b(without)d(argumen)m -(t,)h(lik)m(e)h(`)p Fr(\045compare-lengths)p Fv('.)199 -4661 y(2.)61 b(Declarations)33 b(with)d(an)g(argumen)m(t,)h(lik)m(e)h -(`)p Fr(\045switch=)p Fi(count)11 b Fv('.)199 4801 y(3.)61 -b(Declarations)114 b(of)e(names)g(of)g(en)m(tities)i(in)d(the)h(output) -g(\014le,)132 b(lik)m(e)114 b(`)p Fr(\045define)330 4910 -y(lookup-function-name)25 b Fi(name)11 b Fv('.)275 5085 -y(When)35 b(a)h(declaration)h(is)f(giv)m(en)g(b)s(oth)f(in)h(the)f -(input)g(\014le)h(and)f(as)h(a)g(command)f(line)h(option,)i(the)150 -5195 y(command-line)31 b(option's)g(v)-5 b(alue)31 b(prev)-5 -b(ails.)275 5340 y(The)29 b(follo)m(wing)j Fr(gperf)d -Fv(declarations)j(are)f(a)m(v)-5 b(ailable.)p eop end -%%Page: 17 19 -TeXDict begin 17 18 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(17)150 299 y(`)p Fr(\045delimiters=)p Fi(delimiter-lis)o(t)11 -b Fv(')630 408 y(Allo)m(ws)30 b(y)m(ou)f(to)g(pro)m(vide)g(a)g(string)g -(con)m(taining)h(delimiters)g(used)d(to)j(separate)g(k)m(eyw)m(ords)630 -518 y(from)k(their)h(attributes.)54 b(The)34 b(default)g(is)h -Fr(")p Fv(,)p Fr(")p Fv(.)53 b(This)34 b(option)h(is)f(essen)m(tial)j -(if)d(y)m(ou)h(w)m(an)m(t)630 628 y(to)c(use)f(k)m(eyw)m(ords)h(that)g -(ha)m(v)m(e)g(em)m(b)s(edded)f(commas)h(or)f(newlines.)150 -774 y(`)p Fr(\045struct-type)p Fv(')630 883 y(Allo)m(ws)i(y)m(ou)e(to)i -(include)e(a)h Fr(struct)d Fv(t)m(yp)s(e)j(declaration)h(for)e -(generated)i(co)s(de;)f(see)g(ab)s(o)m(v)m(e)630 993 -y(for)f(an)g(example.)150 1139 y(`)p Fr(\045ignore-case)p -Fv(')630 1249 y(Consider)43 b(upp)s(er)f(and)i(lo)m(w)m(er)h(case)g -(ASCI)s(I)e(c)m(haracters)i(as)f(equiv)-5 b(alen)m(t.)83 -b(The)44 b(string)630 1358 y(comparison)28 b(will)h(use)f(a)h(case)g -(insigni\014can)m(t)g(c)m(haracter)h(comparison.)40 b(Note)29 -b(that)g(lo)s(cale)630 1468 y(dep)s(enden)m(t)g(case)j(mappings)d(are)i -(ignored.)150 1614 y(`)p Fr(\045language=)p Fi(language-name)10 -b Fv(')630 1724 y(Instructs)33 b Fr(gperf)f Fv(to)i(generate)h(co)s(de) -f(in)f(the)h(language)h(sp)s(eci\014ed)d(b)m(y)i(the)g(option's)g(ar-) -630 1833 y(gumen)m(t.)41 b(Languages)31 b(handled)f(are)h(curren)m -(tly:)630 1979 y(`)p Fr(KR-C)p Fv(')238 b(Old-st)m(yle)27 -b(K&R)f(C.)g(This)f(language)j(is)f(understo)s(o)s(d)d(b)m(y)i(old-st)m -(yle)i(C)e(com-)1110 2089 y(pilers)e(and)g(ANSI)f(C)h(compilers,)i(but) -e(ANSI)f(C)h(compilers)h(ma)m(y)f(\015ag)h(w)m(arn-)1110 -2198 y(ings)30 b(\(or)h(ev)m(en)g(errors\))f(b)s(ecause)h(of)f(lac)m -(king)i(`)p Fr(const)p Fv('.)630 2345 y(`)p Fr(C)p Fv(')382 -b(Common)23 b(C.)f(This)h(language)h(is)f(understo)s(o)s(d)e(b)m(y)i -(ANSI)g(C)f(compilers,)k(and)1110 2454 y(also)k(b)m(y)e(old-st)m(yle)i -(C)f(compilers,)g(pro)m(vided)f(that)i(y)m(ou)f Fr(#define)f(const)f -Fv(to)1110 2564 y(empt)m(y)k(for)f(compilers)h(whic)m(h)f(don't)g(kno)m -(w)h(ab)s(out)f(this)g(k)m(eyw)m(ord.)630 2710 y(`)p -Fr(ANSI-C)p Fv(')142 b(ANSI)32 b(C.)g(This)f(language)j(is)e(understo)s -(o)s(d)e(b)m(y)i(ANSI)g(C)f(\(C89,)j(ISO)d(C90\))1110 -2819 y(compilers,)g(ISO)e(C99)i(compilers,)g(and)f(C)p -Fr(++)f Fv(compilers.)630 2966 y(`)p Fr(C++)p Fv(')286 -b(C)p Fr(++)p Fv(.)40 b(This)29 b(language)j(is)f(understo)s(o)s(d)d(b) -m(y)i(C)p Fr(++)g Fv(compilers.)630 3112 y(The)g(default)g(is)h -(ANSI-C.)150 3258 y(`)p Fr(\045define)e(slot-name)e Fi(name)11 -b Fv(')630 3367 y(This)65 b(declaration)j(is)e(only)g(useful)f(when)g -(option)h(`)p Fr(-t)p Fv(')g(\(or,)76 b(equiv)-5 b(alen)m(tly)d(,)77 -b(the)630 3477 y(`)p Fr(\045struct-type)p Fv(')27 b(declaration\))32 -b(has)e(b)s(een)g(giv)m(en.)41 b(By)31 b(default,)f(the)g(program)g -(assumes)630 3587 y(the)48 b(structure)g(comp)s(onen)m(t)h(iden)m -(ti\014er)f(for)g(the)g(k)m(eyw)m(ord)h(is)f(`)p Fr(name)p -Fv('.)94 b(This)47 b(option)630 3696 y(allo)m(ws)f(an)e(arbitrary)g(c)m -(hoice)i(of)f(iden)m(ti\014er)f(for)h(this)f(comp)s(onen)m(t,)k -(although)d(it)g(still)630 3806 y(m)m(ust)30 b(o)s(ccur)g(as)h(the)g -(\014rst)e(\014eld)h(in)g(y)m(our)h(supplied)e Fr(struct)p -Fv(.)150 3952 y(`)p Fr(\045define)g(initializer-suffix)c -Fi(initializers)11 b Fv(')630 4061 y(This)65 b(declaration)j(is)e(only) -g(useful)f(when)g(option)h(`)p Fr(-t)p Fv(')g(\(or,)76 -b(equiv)-5 b(alen)m(tly)d(,)77 b(the)630 4171 y(`)p Fr(\045struct-type) -p Fv(')33 b(declaration\))38 b(has)d(b)s(een)g(giv)m(en.)58 -b(It)36 b(p)s(ermits)f(to)i(sp)s(ecify)e(initializers)630 -4281 y(for)44 b(the)g(structure)g(mem)m(b)s(ers)f(follo)m(wing)i -Fn(slot-name)51 b Fv(in)43 b(empt)m(y)i(hash)e(table)i(en)m(tries.)630 -4390 y(The)d(list)g(of)h(initializers)g(should)e(start)i(with)f(a)g -(comma.)77 b(By)42 b(default,)k(the)c(emitted)630 4500 -y(co)s(de)31 b(will)f(zero-initialize)k(structure)c(mem)m(b)s(ers)g -(follo)m(wing)i Fn(slot-name)p Fv(.)150 4646 y(`)p Fr(\045define)d -(hash-function-name)c Fi(name)11 b Fv(')630 4756 y(Allo)m(ws)31 -b(y)m(ou)f(to)g(sp)s(ecify)g(the)g(name)g(for)f(the)h(generated)h(hash) -e(function.)40 b(Default)31 b(name)630 4865 y(is)f(`)p -Fr(hash)p Fv('.)40 b(This)30 b(option)h(p)s(ermits)e(the)i(use)f(of)h -(t)m(w)m(o)g(hash)f(tables)h(in)f(the)h(same)g(\014le.)150 -5011 y(`)p Fr(\045define)e(lookup-function-name)24 b -Fi(name)11 b Fv(')630 5121 y(Allo)m(ws)43 b(y)m(ou)f(to)h(sp)s(ecify)e -(the)i(name)f(for)f(the)h(generated)h(lo)s(okup)f(function.)75 -b(Default)630 5230 y(name)28 b(is)g(`)p Fr(in_word_set)p -Fv('.)37 b(This)27 b(option)h(p)s(ermits)f(m)m(ultiple)i(generated)f -(hash)f(functions)630 5340 y(to)k(b)s(e)f(used)f(in)h(the)h(same)g -(application.)p eop end -%%Page: 18 20 -TeXDict begin 18 19 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(18)150 299 y(`)p Fr(\045define)29 b(class-name)e -Fi(name)11 b Fv(')630 408 y(This)66 b(option)i(is)f(only)h(useful)e -(when)h(option)g(`)p Fr(-L)30 b(C++)p Fv(')67 b(\(or,)77 -b(equiv)-5 b(alen)m(tly)d(,)79 b(the)630 518 y(`)p Fr(\045language=C++) -p Fv(')43 b(declaration\))k(has)f(b)s(een)f(giv)m(en.)88 -b(It)46 b(allo)m(ws)h(y)m(ou)f(to)g(sp)s(ecify)g(the)630 -628 y(name)30 b(of)h(generated)g(C)p Fr(++)f Fv(class.)41 -b(Default)32 b(name)e(is)h Fr(Perfect_Hash)p Fv(.)150 -792 y(`)p Fr(\0457bit)p Fv(')190 b(This)36 b(option)i(sp)s(eci\014es)f -(that)g(all)h(strings)f(that)h(will)f(b)s(e)g(passed)f(as)i(argumen)m -(ts)f(to)h(the)630 902 y(generated)e(hash)e(function)g(and)h(the)g -(generated)g(lo)s(okup)g(function)f(will)h(solely)h(consist)630 -1011 y(of)d(7-bit)h(ASCI)s(I)e(c)m(haracters)j(\(b)m(ytes)f(in)f(the)g -(range)h(0..127\).)51 b(\(Note)35 b(that)f(the)g(ANSI)e(C)630 -1121 y(functions)f Fr(isalnum)f Fv(and)i Fr(isgraph)e -Fv(do)i Fm(not)41 b Fv(guaran)m(tee)33 b(that)g(a)f(b)m(yte)h(is)f(in)f -(this)h(range.)630 1230 y(Only)e(an)g(explicit)i(test)f(lik)m(e)h(`)p -Fr(c)e(>=)g('A')f(&&)h(c)g(<=)g('Z')p Fv(')f(guaran)m(tees)j(this.\)) -150 1395 y(`)p Fr(\045compare-lengths)p Fv(')630 1504 -y(Compare)40 b(k)m(eyw)m(ord)g(lengths)g(b)s(efore)f(trying)h(a)h -(string)e(comparison.)70 b(This)39 b(option)h(is)630 -1614 y(mandatory)32 b(for)h(binary)e(comparisons)i(\(see)g(Section)h -(3.3)f([Binary)g(Strings],)g(page)g(22\).)630 1724 y(It)g(also)h(migh)m -(t)g(cut)f(do)m(wn)f(on)h(the)g(n)m(um)m(b)s(er)f(of)h(string)g -(comparisons)g(made)g(during)f(the)630 1833 y(lo)s(okup,)i(since)g(k)m -(eyw)m(ords)f(with)g(di\013eren)m(t)h(lengths)g(are)f(nev)m(er)h -(compared)f(via)h Fr(strcmp)p Fv(.)630 1943 y(Ho)m(w)m(ev)m(er,)d -(using)d(`)p Fr(\045compare-lengths)p Fv(')c(migh)m(t)29 -b(greatly)h(increase)f(the)g(size)g(of)g(the)f(gen-)630 -2052 y(erated)j(C)f(co)s(de)h(if)f(the)h(lo)s(okup)f(table)i(range)e -(is)h(large)g(\(whic)m(h)g(implies)g(that)g(the)f(switc)m(h)630 -2162 y(option)24 b(`)p Fr(-S)p Fv(')g(or)g(`)p Fr(\045switch)p -Fv(')f(is)h(not)g(enabled\),)i(since)e(the)g(length)h(table)f(con)m -(tains)i(as)e(man)m(y)630 2271 y(elemen)m(ts)32 b(as)e(there)h(are)g -(en)m(tries)g(in)f(the)g(lo)s(okup)g(table.)150 2436 -y(`)p Fr(\045compare-strncmp)p Fv(')630 2545 y(Generates)22 -b(C)f(co)s(de)g(that)h(uses)e(the)i Fr(strncmp)d Fv(function)h(to)i(p)s -(erform)e(string)h(comparisons.)630 2655 y(The)30 b(default)g(action)i -(is)f(to)g(use)f Fr(strcmp)p Fv(.)150 2819 y(`)p Fr -(\045readonly-tables)p Fv(')630 2929 y(Mak)m(es)41 b(the)f(con)m(ten)m -(ts)h(of)f(all)h(generated)f(lo)s(okup)f(tables)i(constan)m(t,)i(i.e.,) -h(\\readonly".)630 3039 y(Man)m(y)31 b(compilers)g(can)g(generate)h -(more)e(e\016cien)m(t)i(co)s(de)f(for)f(this)h(b)m(y)f(putting)g(the)h -(tables)630 3148 y(in)f(readonly)h(memory)-8 b(.)150 -3313 y(`)p Fr(\045enum)p Fv(')190 b(De\014ne)31 b(constan)m(t)g(v)-5 -b(alues)31 b(using)f(an)g(en)m(um)g(lo)s(cal)i(to)f(the)g(lo)s(okup)f -(function)g(rather)g(than)630 3422 y(with)37 b(#de\014nes.)60 -b(This)36 b(also)i(means)g(that)f(di\013eren)m(t)h(lo)s(okup)f -(functions)g(can)g(reside)g(in)630 3532 y(the)31 b(same)f(\014le.)41 -b(Thanks)29 b(to)j(James)e(Clark)g Fr(<jjc@ai.mit.edu>)p -Fv(.)150 3696 y(`)p Fr(\045includes)p Fv(')630 3806 y(Include)g(the)h -(necessary)h(system)f(include)g(\014le,)g Fr(<string.h>)p -Fv(,)e(at)i(the)g(b)s(eginning)g(of)g(the)630 3915 y(co)s(de.)39 -b(By)27 b(default,)g(this)f(is)g(not)g(done;)i(the)e(user)f(m)m(ust)h -(include)g(this)f(header)h(\014le)g(himself)630 4025 -y(to)31 b(allo)m(w)h(compilation)g(of)e(the)h(co)s(de.)150 -4189 y(`)p Fr(\045global-table)p Fv(')630 4299 y(Generate)38 -b(the)f(static)h(table)f(of)g(k)m(eyw)m(ords)g(as)g(a)g(static)h -(global)g(v)-5 b(ariable,)39 b(rather)d(than)630 4408 -y(hiding)30 b(it)h(inside)f(of)g(the)h(lo)s(okup)f(function)g(\(whic)m -(h)g(is)h(the)f(default)h(b)s(eha)m(vior\).)150 4573 -y(`)p Fr(\045pic)p Fv(')238 b(Optimize)42 b(the)f(generated)h(table)g -(for)f(inclusion)g(in)g(shared)f(libraries.)73 b(This)40 -b(reduces)630 4682 y(the)35 b(startup)g(time)h(of)f(programs)g(using)g -(a)h(shared)e(library)h(con)m(taining)i(the)e(generated)630 -4792 y(co)s(de.)j(If)21 b(the)h(`)p Fr(\045struct-type)p -Fv(')d(declaration)24 b(\(or,)g(equiv)-5 b(alen)m(tly)d(,)26 -b(the)c(option)g(`)p Fr(-t)p Fv('\))g(is)g(also)630 4902 -y(giv)m(en,)32 b(the)f(\014rst)e(\014eld)i(of)f(the)h(user-de\014ned)e -(struct)i(m)m(ust)f(b)s(e)g(of)h(t)m(yp)s(e)g(`)p Fr(int)p -Fv(',)f(not)h(`)p Fr(char)630 5011 y(*)p Fv(',)h(b)s(ecause)f(it)i -(will)e(con)m(tain)i(o\013sets)g(in)m(to)f(the)g(string)f(p)s(o)s(ol)h -(instead)f(of)h(actual)h(strings.)630 5121 y(T)-8 b(o)33 -b(con)m(v)m(ert)h(suc)m(h)f(an)f(o\013set)i(to)f(a)g(string,)h(y)m(ou)f -(can)g(use)f(the)h(expression)f(`)p Fr(stringpool)630 -5230 y(+)e Fi(o)11 b Fv(',)33 b(where)f Fn(o)37 b Fv(is)c(the)g -(o\013set.)48 b(The)32 b(string)g(p)s(o)s(ol)g(name)h(can)g(b)s(e)f(c)m -(hanged)h(through)f(the)630 5340 y(`)p Fr(\045define)d -(string-pool-name)p Fv(')d(declaration.)p eop end -%%Page: 19 21 -TeXDict begin 19 20 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(19)150 299 y(`)p Fr(\045define)29 b(string-pool-name)d -Fi(name)11 b Fv(')630 408 y(Allo)m(ws)42 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(of)g(the)g(generated)h(string)f(p)s(o)s(ol)g(created)h(b) -m(y)f(the)630 518 y(declaration)48 b(`)p Fr(\045pic)p -Fv(')e(\(or,)51 b(equiv)-5 b(alen)m(tly)d(,)53 b(the)47 -b(option)f(`)p Fr(-P)p Fv('\).)90 b(The)46 b(default)g(name)h(is)630 -628 y(`)p Fr(stringpool)p Fv('.)38 b(This)29 b(declaration)i(p)s -(ermits)e(the)h(use)g(of)g(t)m(w)m(o)h(hash)e(tables)h(in)g(the)g(same) -630 737 y(\014le,)39 b(with)d(`)p Fr(\045pic)p Fv(')g(and)g(ev)m(en)h -(when)f(the)h(`)p Fr(\045global-table)p Fv(')c(declaration)38 -b(\(or,)h(equiv)-5 b(a-)630 847 y(len)m(tly)d(,)32 b(the)f(option)g(`)p -Fr(-G)p Fv('\))f(is)h(giv)m(en.)150 1108 y(`)p Fr(\045null-strings)p -Fv(')630 1218 y(Use)39 b(NULL)g(strings)f(instead)i(of)e(empt)m(y)i -(strings)e(for)h(empt)m(y)g(k)m(eyw)m(ord)g(table)h(en)m(tries.)630 -1327 y(This)e(reduces)g(the)h(startup)g(time)g(of)g(programs)g(using)f -(a)h(shared)f(library)g(con)m(taining)630 1437 y(the)29 -b(generated)g(co)s(de)g(\(but)f(not)g(as)h(m)m(uc)m(h)g(as)f(the)h -(declaration)h(`)p Fr(\045pic)p Fv('\),)f(at)g(the)f(exp)s(ense)630 -1546 y(of)j(one)f(more)h(test-and-branc)m(h)g(instruction)f(at)h(run)e -(time.)150 1807 y(`)p Fr(\045define)g(word-array-name)d -Fi(name)11 b Fv(')630 1917 y(Allo)m(ws)41 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(for)f(the)i(generated)g(arra)m(y)f(con)m(taining)i(the)e -(hash)630 2027 y(table.)106 b(Default)53 b(name)e(is)h(`)p -Fr(wordlist)p Fv('.)103 b(This)51 b(option)h(p)s(ermits)f(the)h(use)g -(of)g(t)m(w)m(o)630 2136 y(hash)37 b(tables)h(in)g(the)g(same)g -(\014le,)i(ev)m(en)e(when)f(the)h(option)g(`)p Fr(-G)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)630 -2246 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 2507 y(`)p Fr(\045define)f(length-table-name)c -Fi(name)11 b Fv(')630 2616 y(Allo)m(ws)36 b(y)m(ou)e(to)i(sp)s(ecify)e -(the)h(name)f(for)g(the)h(generated)h(arra)m(y)f(con)m(taining)h(the)f -(length)630 2726 y(table.)77 b(Default)43 b(name)g(is)f(`)p -Fr(lengthtable)p Fv('.)74 b(This)41 b(option)i(p)s(ermits)e(the)h(use)g -(of)h(t)m(w)m(o)630 2836 y(length)33 b(tables)h(in)f(the)g(same)g -(\014le,)h(ev)m(en)g(when)e(the)h(option)h(`)p Fr(-G)p -Fv(')f(\(or,)h(equiv)-5 b(alen)m(tly)d(,)36 b(the)630 -2945 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 3206 y(`)p Fr(\045switch=)p Fi(count)11 -b Fv(')630 3316 y(Causes)35 b(the)h(generated)h(C)e(co)s(de)h(to)h(use) -e(a)h Fr(switch)e Fv(statemen)m(t)k(sc)m(heme,)g(rather)d(than)630 -3425 y(an)j(arra)m(y)g(lo)s(okup)g(table.)64 b(This)37 -b(can)h(lead)h(to)f(a)h(reduction)f(in)f(b)s(oth)g(time)i(and)e(space) -630 3535 y(requiremen)m(ts)43 b(for)h(some)f(input)g(\014les.)80 -b(The)43 b(argumen)m(t)h(to)g(this)f(option)h(determines)630 -3645 y(ho)m(w)33 b(man)m(y)f Fr(switch)f Fv(statemen)m(ts)k(are)e -(generated.)49 b(A)32 b(v)-5 b(alue)34 b(of)e(1)i(generates)g(1)f -Fr(switch)630 3754 y Fv(con)m(taining)25 b(all)e(the)h(elemen)m(ts,)i -(a)d(v)-5 b(alue)23 b(of)h(2)f(generates)h(2)g(tables)f(with)g(1/2)h -(the)g(elemen)m(ts)630 3864 y(in)38 b(eac)m(h)h Fr(switch)p -Fv(,)g(etc.)65 b(This)37 b(is)h(useful)g(since)g(man)m(y)h(C)e -(compilers)i(cannot)g(correctly)630 3973 y(generate)29 -b(co)s(de)f(for)f(large)h Fr(switch)e Fv(statemen)m(ts.)41 -b(This)27 b(option)h(w)m(as)g(inspired)e(in)h(part)g(b)m(y)630 -4083 y(Keith)k(Bostic's)h(original)f(C)f(program.)150 -4344 y(`)p Fr(\045omit-struct-type)p Fv(')630 4454 y(Prev)m(en)m(ts)f -(the)e(transfer)h(of)f(the)h(t)m(yp)s(e)g(declaration)h(to)g(the)f -(output)f(\014le.)40 b(Use)28 b(this)f(option)630 4563 -y(if)j(the)h(t)m(yp)s(e)f(is)h(already)g(de\014ned)e(elsewhere.)150 -4864 y Fk(3.1.1.3)63 b(C)41 b(Co)s(de)g(Inclusion)275 -5011 y Fv(Using)26 b(a)g(syn)m(tax)h(similar)f(to)h(GNU)f(utilities)i -Fr(flex)d Fv(and)g Fr(bison)p Fv(,)h(it)g(is)g(p)s(ossible)g(to)g -(directly)h(include)150 5121 y(C)i(source)h(text)g(and)f(commen)m(ts)h -(v)m(erbatim)g(in)m(to)h(the)e(generated)i(output)e(\014le.)40 -b(This)29 b(is)g(accomplished)150 5230 y(b)m(y)37 b(enclosing)h(the)g -(region)g(inside)e(left-justi\014ed)i(surrounding)d(`)p -Fr(\045{)p Fv(',)k(`)p Fr(\045})p Fv(')e(pairs.)61 b(Here)38 -b(is)f(an)g(input)150 5340 y(fragmen)m(t)31 b(based)f(on)g(the)h -(previous)f(example)h(that)g(illustrates)g(this)g(feature:)p -eop end -%%Page: 20 22 -TeXDict begin 20 21 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(20)390 299 y Fr(\045{)390 408 y(#include)46 b(<assert.h>)390 -518 y(/*)h(This)g(section)f(of)h(code)f(is)i(inserted)d(directly)h -(into)g(the)h(output.)f(*/)390 628 y(int)h(return_month_days)c -(\(struct)j(month)g(*months,)g(int)h(is_leap_year\);)390 -737 y(\045})390 847 y(struct)f(month)g({)i(char)f(*name;)f(int)h -(number;)e(int)i(days;)g(int)g(leap_days;)e(};)390 956 -y(\045\045)390 1066 y(january,)141 b(1,)47 b(31,)g(31)390 -1176 y(february,)93 b(2,)47 b(28,)g(29)390 1285 y(march,)237 -b(3,)47 b(31,)g(31)390 1395 y(...)150 1636 y Fk(3.1.2)63 -b(F)-10 b(ormat)41 b(for)h(Keyw)m(ord)e(En)m(tries)275 -1783 y Fv(The)33 b(second)i(input)e(\014le)i(format)g(section)g(con)m -(tains)h(lines)e(of)h(k)m(eyw)m(ords)g(and)e(an)m(y)i(asso)s(ciated)h -(at-)150 1893 y(tributes)i(y)m(ou)h(migh)m(t)g(supply)-8 -b(.)64 b(A)39 b(line)f(b)s(eginning)g(with)g(`)p Fr(#)p -Fv(')h(in)f(the)h(\014rst)f(column)g(is)g(considered)h(a)150 -2002 y(commen)m(t.)53 b(Ev)m(erything)34 b(follo)m(wing)h(the)g(`)p -Fr(#)p Fv(')f(is)g(ignored,)h(up)e(to)i(and)e(including)h(the)g(follo)m -(wing)h(new-)150 2112 y(line.)57 b(A)36 b(line)h(b)s(eginning)e(with)g -(`)p Fr(\045)p Fv(')h(in)g(the)g(\014rst)f(column)g(is)h(an)g(option)g -(declaration)i(and)d(m)m(ust)h(not)150 2222 y(o)s(ccur)30 -b(within)g(the)h(k)m(eyw)m(ords)f(section.)275 2399 y(The)36 -b(\014rst)g(\014eld)g(of)h(eac)m(h)g(non-commen)m(t)h(line)f(is)g(alw)m -(a)m(ys)h(the)f(k)m(eyw)m(ord)g(itself.)60 b(It)37 b(can)g(b)s(e)f(giv) -m(en)150 2508 y(in)f(t)m(w)m(o)h(w)m(a)m(ys:)51 b(as)35 -b(a)g(simple)g(name,)i(i.e.,)g(without)e(surrounding)e(string)i -(quotation)h(marks,)g(or)f(as)h(a)150 2618 y(string)i(enclosed)g(in)f -(double-quotes,)j(in)d(C)h(syn)m(tax,)i(p)s(ossibly)d(with)g(bac)m -(kslash)h(escap)s(es)g(lik)m(e)h Fr(\\")e Fv(or)150 2727 -y Fr(\\234)23 b Fv(or)i Fr(\\xa8)p Fv(.)37 b(In)24 b(either)h(case,)i -(it)e(m)m(ust)f(start)h(righ)m(t)g(at)g(the)g(b)s(eginning)e(of)i(the)g -(line,)h(without)e(leading)150 2837 y(whitespace.)58 -b(In)35 b(this)h(con)m(text,)j(a)e(\\\014eld")f(is)g(considered)g(to)g -(extend)g(up)f(to,)j(but)d(not)h(include,)i(the)150 2946 -y(\014rst)g(blank,)i(comma,)i(or)c(newline.)65 b(Here)39 -b(is)f(a)h(simple)g(example)g(tak)m(en)g(from)f(a)h(partial)h(list)f -(of)f(C)150 3056 y(reserv)m(ed)31 b(w)m(ords:)390 3233 -y Fr(#)47 b(These)g(are)g(a)g(few)g(C)h(reserved)d(words,)h(see)h(the)g -(c.gperf)f(file)390 3342 y(#)h(for)g(a)h(complete)d(list)i(of)g(ANSI)g -(C)g(reserved)f(words.)390 3452 y(unsigned)390 3562 y(sizeof)390 -3671 y(switch)390 3781 y(signed)390 3890 y(if)390 4000 -y(default)390 4110 y(for)390 4219 y(while)390 4329 y(return)275 -4506 y Fv(Note)38 b(that)f(unlik)m(e)g Fr(flex)f Fv(or)h -Fr(bison)e Fv(the)j(\014rst)e(`)p Fr(\045\045)p Fv(')g(mark)m(er)i(ma)m -(y)f(b)s(e)f(elided)h(if)g(the)g(declaration)150 4615 -y(section)32 b(is)e(empt)m(y)-8 b(.)275 4792 y(Additional)29 -b(\014elds)f(ma)m(y)h(optionally)h(follo)m(w)g(the)f(leading)g(k)m(eyw) -m(ord.)41 b(Fields)29 b(should)e(b)s(e)h(separated)150 -4902 y(b)m(y)g(commas,)i(and)d(terminate)j(at)f(the)f(end)g(of)g(line.) -41 b(What)29 b(these)f(\014elds)g(mean)g(is)h(en)m(tirely)g(up)e(to)i -(y)m(ou;)150 5011 y(they)k(are)h(used)e(to)i(initialize)h(the)f(elemen) -m(ts)g(of)f(the)h(user-de\014ned)d Fr(struct)h Fv(pro)m(vided)g(b)m(y)h -(y)m(ou)h(in)f(the)150 5121 y(declaration)40 b(section.)67 -b(If)39 b(the)g(`)p Fr(-t)p Fv(')f(option)h(\(or,)j(equiv)-5 -b(alen)m(tly)d(,)43 b(the)c(`)p Fr(\045struct-type)p -Fv(')d(declaration\))150 5230 y(is)g Fm(not)45 b Fv(enabled)36 -b(these)g(\014elds)g(are)g(simply)f(ignored.)58 b(All)36 -b(previous)g(examples)g(except)h(the)f(last)h(one)150 -5340 y(con)m(tain)32 b(k)m(eyw)m(ord)f(attributes.)p -eop end -%%Page: 21 23 -TeXDict begin 21 22 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(21)150 299 y Fk(3.1.3)63 b(Including)41 b(Additional)g(C)g(F)-10 -b(unctions)275 446 y Fv(The)30 b(optional)i(third)e(section)i(also)g -(corresp)s(onds)d(closely)j(with)f(con)m(v)m(en)m(tions)i(found)c(in)i -Fr(flex)f Fv(and)150 555 y Fr(bison)p Fv(.)36 b(All)23 -b(text)g(in)f(this)f(section,)k(starting)e(at)g(the)f(\014nal)f(`)p -Fr(\045\045)p Fv(')h(and)f(extending)i(to)f(the)g(end)g(of)g(the)g -(input)150 665 y(\014le,)31 b(is)g(included)g(v)m(erbatim)g(in)m(to)h -(the)f(generated)h(output)f(\014le.)42 b(Naturally)-8 -b(,)33 b(it)e(is)g(y)m(our)g(resp)s(onsibilit)m(y)150 -775 y(to)g(ensure)f(that)h(the)f(co)s(de)h(con)m(tained)g(in)g(this)f -(section)h(is)g(v)-5 b(alid)30 b(C.)150 982 y Fk(3.1.4)63 -b(Where)41 b(to)g(place)f(directiv)m(es)g(for)i(GNU)g -Fj(indent)p Fk(.)275 1129 y Fv(If)26 b(y)m(ou)i(w)m(an)m(t)g(to)g(in)m -(v)m(ok)m(e)h(GNU)f Fr(indent)e Fv(on)h(a)g Fr(gperf)f -Fv(input)h(\014le,)h(y)m(ou)f(will)h(see)g(that)g(GNU)g -Fr(indent)150 1239 y Fv(do)s(esn't)33 b(understand)e(the)i(`)p -Fr(\045\045)p Fv(',)h(`)p Fr(\045{)p Fv(')e(and)h(`)p -Fr(\045})p Fv(')g(directiv)m(es)h(that)f(con)m(trol)i -Fr(gperf)p Fv('s)c(in)m(terpretation)k(of)150 1348 y(the)23 -b(input)f(\014le.)38 b(Therefore)23 b(y)m(ou)g(ha)m(v)m(e)h(to)g -(insert)f(some)g(directiv)m(es)h(for)f(GNU)h Fr(indent)p -Fv(.)36 b(More)24 b(precisely)-8 b(,)150 1458 y(assuming)30 -b(the)h(most)f(general)i(input)d(\014le)i(structure)390 -1600 y Fr(declarations)44 b(part)j(1)390 1710 y(\045{)390 -1820 y(verbatim)f(code)390 1929 y(\045})390 2039 y(declarations)e(part) -j(2)390 2148 y(\045\045)390 2258 y(keywords)390 2368 -y(\045\045)390 2477 y(functions)150 2620 y Fv(y)m(ou)31 -b(w)m(ould)f(insert)g(`)p Fr(*INDENT-OFF*)p Fv(')e(and)h(`)p -Fr(*INDENT-ON*)p Fv(')f(commen)m(ts)k(as)e(follo)m(ws:)390 -2763 y Fr(/*)47 b(*INDENT-OFF*)e(*/)390 2872 y(declarations)f(part)j(1) -390 2982 y(\045{)390 3091 y(/*)g(*INDENT-ON*)e(*/)390 -3201 y(verbatim)h(code)390 3310 y(/*)h(*INDENT-OFF*)e(*/)390 -3420 y(\045})390 3530 y(declarations)f(part)j(2)390 3639 -y(\045\045)390 3749 y(keywords)390 3858 y(\045\045)390 -3968 y(/*)g(*INDENT-ON*)e(*/)390 4078 y(functions)150 -4322 y Fu(3.2)68 b(Output)45 b(F)-11 b(ormat)45 b(for)g(Generated)h(C)f -(Co)t(de)g(with)g Fl(gperf)275 4482 y Fv(Sev)m(eral)28 -b(options)g(con)m(trol)h(ho)m(w)e(the)h(generated)h(C)e(co)s(de)h(app)s -(ears)e(on)i(the)g(standard)e(output.)40 b(Tw)m(o)150 -4591 y(C)i(functions)g(are)h(generated.)77 b(They)42 -b(are)h(called)g Fr(hash)f Fv(and)f Fr(in_word_set)p -Fv(,)i(although)g(y)m(ou)f(ma)m(y)150 4701 y(mo)s(dify)30 -b(their)g(names)h(with)f(a)h(command-line)g(option.)42 -b(Both)31 b(functions)f(require)g(t)m(w)m(o)i(argumen)m(ts,)g(a)150 -4811 y(string,)h Fr(char)c(*)i Fn(str)p Fv(,)i(and)e(a)i(length)f -(parameter,)h Fr(int)e Fn(len)p Fv(.)46 b(Their)31 b(default)h -(function)g(protot)m(yp)s(es)h(are)150 4920 y(as)e(follo)m(ws:)3350 -5121 y([F)-8 b(unction])-3599 b Fh(unsigned)55 b(int)e(hash)47 -b Fg(\()p Fn(const)31 b(c)m(har)g(*)f Ff(str)p Fn(,)i(unsigned)d(in)m -(t)i Ff(len)12 b Fg(\))390 5230 y Fv(By)35 b(default,)h(the)e -(generated)i Fr(hash)d Fv(function)h(returns)f(an)i(in)m(teger)h(v)-5 -b(alue)34 b(created)i(b)m(y)e(adding)390 5340 y Fn(len)28 -b Fv(to)g(sev)m(eral)h(user-sp)s(eci\014ed)d Fn(str)34 -b Fv(b)m(yte)28 b(p)s(ositions)g(indexed)f(in)m(to)h(an)f -Fn(asso)s(ciated)i(v)-5 b(alues)32 b Fv(table)p eop end -%%Page: 22 24 -TeXDict begin 22 23 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(22)390 299 y(stored)28 b(in)g(a)g(lo)s(cal)i(static)f(arra)m(y)-8 -b(.)41 b(The)28 b(asso)s(ciated)h(v)-5 b(alues)29 b(table)g(is)f -(constructed)g(in)m(ternally)h(b)m(y)390 408 y Fr(gperf)34 -b Fv(and)g(later)i(output)e(as)i(a)f(static)i(lo)s(cal)f(C)e(arra)m(y)i -(called)g(`)p Fr(hash_table)p Fv('.)52 b(The)35 b(relev)-5 -b(an)m(t)390 518 y(selected)28 b(p)s(ositions)f(\(i.e.)41 -b(indices)27 b(in)m(to)h Fn(str)7 b Fv(\))26 b(are)h(sp)s(eci\014ed)f -(via)i(the)f(`)p Fr(-k)p Fv(')g(option)g(when)f(running)390 -628 y Fr(gperf)p Fv(,)j(as)i(detailed)g(in)f(the)h Fm(Options)39 -b Fv(section)31 b(b)s(elo)m(w)g(\(see)g(Chapter)f(4)h([Options],)f -(page)h(24\).)3350 830 y([F)-8 b(unction])-3599 b Fh(in_word_set)49 -b Fg(\()p Fn(const)31 b(c)m(har)g(*)g Ff(str)p Fn(,)g(unsigned)e(in)m -(t)i Ff(len)12 b Fg(\))390 939 y Fv(If)33 b Fn(str)41 -b Fv(is)33 b(in)h(the)g(k)m(eyw)m(ord)g(set,)i(returns)c(a)j(p)s(oin)m -(ter)f(to)g(that)h(k)m(eyw)m(ord.)51 b(More)35 b(exactly)-8 -b(,)37 b(if)d(the)390 1049 y(option)d(`)p Fr(-t)p Fv(')g(\(or,)g(equiv) --5 b(alen)m(tly)d(,)33 b(the)e(`)p Fr(\045struct-type)p -Fv(')d(declaration\))k(w)m(as)f(giv)m(en,)h(it)f(returns)f(a)390 -1159 y(p)s(oin)m(ter)g(to)h(the)g(matc)m(hing)h(k)m(eyw)m(ord's)e -(structure.)41 b(Otherwise)30 b(it)h(returns)e Fr(NULL)p -Fv(.)275 1361 y(If)39 b(the)i(option)f(`)p Fr(-c)p Fv(')g(\(or,)j -(equiv)-5 b(alen)m(tly)d(,)45 b(the)c(`)p Fr(\045compare-strncmp)p -Fv(')36 b(declaration\))42 b(is)e(not)g(used,)150 1470 -y Fn(str)k Fv(m)m(ust)37 b(b)s(e)f(a)i(NUL)f(terminated)h(string)f(of)h -(exactly)h(length)e Fn(len)p Fv(.)62 b(If)37 b(`)p Fr(-c)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)150 -1580 y(`)p Fr(\045compare-strncmp)p Fv(')22 b(declaration\))28 -b(is)e(used,)g Fn(str)32 b Fv(m)m(ust)26 b(simply)g(b)s(e)f(an)h(arra)m -(y)g(of)g Fn(len)g Fv(b)m(ytes)h(and)e(do)s(es)150 1689 -y(not)31 b(need)f(to)h(b)s(e)f(NUL)g(terminated.)275 -1833 y(The)f(co)s(de)i(generated)g(for)g(these)f(t)m(w)m(o)i(functions) -e(is)g(a\013ected)i(b)m(y)f(the)f(follo)m(wing)i(options:)150 -2006 y(`)p Fr(-t)p Fv(')150 2115 y(`)p Fr(--struct-type)p -Fv(')630 2225 y(Mak)m(e)g(use)e(of)h(the)f(user-de\014ned)f -Fr(struct)p Fv(.)150 2393 y(`)p Fr(-S)h Fi(total-switch-statements)10 -b Fv(')150 2503 y(`)p Fr(--switch=)p Fi(total-switch-sta)o(teme)o(nts)g -Fv(')630 2612 y(Generate)22 b(1)f(or)g(more)g(C)f Fr(switch)f -Fv(statemen)m(t)j(rather)f(than)f(use)h(a)g(large,)j(\(and)c(p)s(oten)m -(tially)630 2722 y(sparse\))j(static)h(arra)m(y)-8 b(.)40 -b(Although)23 b(the)g(exact)h(time)g(and)e(space)i(sa)m(vings)g(of)f -(this)g(approac)m(h)630 2831 y(v)-5 b(ary)32 b(according)g(to)h(y)m -(our)e(C)g(compiler's)i(degree)f(of)g(optimization,)i(this)d(metho)s(d) -h(often)630 2941 y(results)e(in)g(smaller)h(and)f(faster)h(co)s(de.)275 -3114 y(If)c(the)h(`)p Fr(-t)p Fv(')g(and)f(`)p Fr(-S)p -Fv(')g(options)i(\(or,)f(equiv)-5 b(alen)m(tly)d(,)31 -b(the)d(`)p Fr(\045struct-type)p Fv(')d(and)i(`)p Fr(\045switch)p -Fv(')g(declara-)150 3223 y(tions\))f(are)f(omitted,)i(the)e(default)g -(action)h(is)f(to)h(generate)g(a)g Fr(char)j(*)24 b Fv(arra)m(y)i(con)m -(taining)g(the)f(k)m(eyw)m(ords,)150 3333 y(together)32 -b(with)e(additional)i(empt)m(y)f(strings)f(used)g(for)g(padding)g(the)g -(arra)m(y)-8 b(.)43 b(By)30 b(exp)s(erimen)m(ting)h(with)150 -3442 y(the)g(v)-5 b(arious)32 b(input)e(and)g(output)h(options,)h(and)f -(timing)g(the)h(resulting)f(C)g(co)s(de,)h(y)m(ou)f(can)h(determine)150 -3552 y(the)f(b)s(est)f(option)g(c)m(hoices)i(for)f(di\013eren)m(t)f(k)m -(eyw)m(ord)h(set)g(c)m(haracteristics.)150 3798 y Fu(3.3)68 -b(Use)46 b(of)f(NUL)g(b)l(ytes)275 3957 y Fv(By)30 b(default,)h(the)f -(co)s(de)g(generated)i(b)m(y)e Fr(gperf)e Fv(op)s(erates)j(on)f(zero)h -(terminated)g(strings,)f(the)g(usual)150 4067 y(represen)m(tation)41 -b(of)e(strings)h(in)f(C.)h(This)e(means)i(that)g(the)g(k)m(eyw)m(ords)g -(in)f(the)h(input)f(\014le)g(m)m(ust)h(not)150 4176 y(con)m(tain)d(NUL) -f(b)m(ytes,)i(and)e(the)g Fn(str)42 b Fv(argumen)m(t)36 -b(passed)g(to)g Fr(hash)f Fv(or)h Fr(in_word_set)d Fv(m)m(ust)j(b)s(e)f -(NUL)150 4286 y(terminated)c(and)f(ha)m(v)m(e)h(exactly)h(length)f -Fn(len)p Fv(.)275 4429 y(If)k(option)i(`)p Fr(-c)p Fv(')f(\(or,)i -(equiv)-5 b(alen)m(tly)d(,)40 b(the)c(`)p Fr(\045compare-strncmp)p -Fv(')c(declaration\))38 b(is)e(used,)h(then)f(the)150 -4539 y Fn(str)e Fv(argumen)m(t)29 b(do)s(es)e(not)h(need)g(to)h(b)s(e)e -(NUL)h(terminated.)41 b(The)27 b(co)s(de)h(generated)h(b)m(y)f -Fr(gperf)f Fv(will)h(only)150 4649 y(access)h(the)f(\014rst)g -Fn(len)p Fv(,)g(not)h Fn(len)p Fr(+)p Fn(1)p Fv(,)f(b)m(ytes)h -(starting)g(at)f Fn(str)p Fv(.)40 b(Ho)m(w)m(ev)m(er,)31 -b(the)d(k)m(eyw)m(ords)g(in)g(the)g(input)f(\014le)150 -4758 y(still)k(m)m(ust)g(not)f(con)m(tain)i(NUL)e(b)m(ytes.)275 -4902 y(If)35 b(option)i(`)p Fr(-l)p Fv(')f(\(or,)i(equiv)-5 -b(alen)m(tly)d(,)40 b(the)c(`)p Fr(\045compare-lengths)p -Fv(')c(declaration\))38 b(is)e(used,)h(then)f(the)150 -5011 y(hash)c(table)i(p)s(erforms)d(binary)h(comparison.)47 -b(The)33 b(k)m(eyw)m(ords)g(in)f(the)h(input)f(\014le)g(ma)m(y)i(con)m -(tain)g(NUL)150 5121 y(b)m(ytes,)46 b(written)41 b(in)h(string)g(syn)m -(tax)g(as)g Fr(\\000)f Fv(or)h Fr(\\x00)p Fv(,)i(and)d(the)h(co)s(de)g -(generated)h(b)m(y)f Fr(gperf)f Fv(will)150 5230 y(treat)i(NUL)e(lik)m -(e)i(an)m(y)f(other)g(b)m(yte.)75 b(Also,)45 b(in)c(this)g(case)i(the)f -(`)p Fr(-c)p Fv(')f(option)h(\(or,)j(equiv)-5 b(alen)m(tly)d(,)47 -b(the)150 5340 y(`)p Fr(\045compare-strncmp)p Fv(')26 -b(declaration\))33 b(is)d(ignored.)p eop end -%%Page: 23 25 -TeXDict begin 23 24 bop 150 -116 a Fv(Chapter)30 b(3:)41 -b(High-Lev)m(el)32 b(Description)g(of)e(GNU)h Fr(gperf)1520 -b Fv(23)150 299 y Fu(3.4)68 b(The)45 b(Cop)l(yrigh)l(t)h(of)f(the)g -(Output)275 458 y Fr(gperf)24 b Fv(is)i(under)f(GPL,)h(but)f(that)i(do) -s(es)e(not)h(cause)h(the)f(output)g(pro)s(duced)e(b)m(y)i -Fr(gperf)e Fv(to)j(b)s(e)e(under)150 568 y(GPL.)35 b(The)f(reason)g(is) -h(that)g(the)f(output)g(con)m(tains)i(only)f(small)g(pieces)g(of)f -(text)i(that)f(come)g(directly)150 677 y(from)f Fr(gperf)p -Fv('s)f(source)h(co)s(de)h({)g(only)f(ab)s(out)g(7)h(lines)f(long,)i -(to)s(o)g(small)e(for)g(b)s(eing)g(signi\014can)m(t)i({,)g(and)150 -787 y(therefore)31 b(the)f(output)g(is)h(not)f(a)h(\\w)m(ork)g(based)f -(on)g Fr(gperf)p Fv(")g(\(in)g(the)h(sense)f(of)h(the)f(GPL)h(v)m -(ersion)f(3\).)275 922 y(On)i(the)h(other)h(hand,)f(the)g(output)g(pro) -s(duced)f(b)m(y)h Fr(gperf)e Fv(con)m(tains)k(essen)m(tially)g(all)f -(of)f(the)h(input)150 1031 y(\014le.)40 b(Therefore)26 -b(the)h(output)g(is)g(a)g(\\deriv)-5 b(ativ)m(e)29 b(w)m(ork")e(of)g -(the)g(input)f(\(in)h(the)g(sense)g(of)g(U.S.)g(cop)m(yrigh)m(t)150 -1141 y(la)m(w\);)42 b(and)37 b(its)h(cop)m(yrigh)m(t)g(status)g(dep)s -(ends)e(on)h(the)g(cop)m(yrigh)m(t)i(of)f(the)f(input.)61 -b(F)-8 b(or)38 b(most)f(soft)m(w)m(are)150 1250 y(licenses,)28 -b(the)e(result)g(is)g(that)h(the)f(the)g(output)f(is)h(under)f(the)h -(same)g(license,)i(with)e(the)g(same)h(cop)m(yrigh)m(t)150 -1360 y(holder,)j(as)h(the)f(input)g(that)h(w)m(as)g(passed)e(to)j -Fr(gperf)p Fv(.)p eop end -%%Page: 24 26 -TeXDict begin 24 25 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(24)150 299 y -Fs(4)80 b(In)l(v)l(oking)52 b Fo(gperf)275 586 y Fv(There)35 -b(are)i Fm(many)46 b Fv(options)36 b(to)i Fr(gperf)p -Fv(.)57 b(They)36 b(w)m(ere)h(added)e(to)j(mak)m(e)f(the)g(program)f -(more)g(con-)150 695 y(v)m(enien)m(t)f(for)e(use)g(with)g(real)h -(applications.)50 b(\\On-line")34 b(help)f(is)g(readily)h(a)m(v)-5 -b(ailable)36 b(via)e(the)f(`)p Fr(--help)p Fv(')150 805 -y(option.)41 b(Here)31 b(is)f(the)h(complete)h(list)f(of)f(options.)150 -1064 y Fu(4.1)68 b(Sp)t(ecifying)45 b(the)g(Lo)t(cation)h(of)f(the)g -(Output)g(File)150 1257 y Fv(`)p Fr(--output-file=)p -Fi(file)11 b Fv(')630 1367 y(Allo)m(ws)31 b(y)m(ou)g(to)g(sp)s(ecify)f -(the)h(name)f(of)h(the)f(\014le)h(to)g(whic)m(h)f(the)h(output)f(is)g -(written)g(to.)275 1553 y(The)f(results)i(are)f(written)h(to)g -(standard)e(output)h(if)h(no)f(output)g(\014le)g(is)h(sp)s(eci\014ed)f -(or)g(if)g(it)h(is)g(`)p Fr(-)p Fv('.)150 1811 y Fu(4.2)68 -b(Options)45 b(that)h(a\013ect)g(In)l(terpretation)h(of)e(the)g(Input)g -(File)275 1971 y Fv(These)d(options)h(are)g(also)g(a)m(v)-5 -b(ailable)45 b(as)e(declarations)h(in)e(the)h(input)f(\014le)g(\(see)i -(Section)f(3.1.1.2)150 2080 y([Gp)s(erf)30 b(Declarations],)j(page)e -(16\).)150 2266 y(`)p Fr(-e)f Fi(keyword-delimiter-list)11 -b Fv(')150 2376 y(`)p Fr(--delimiters=)p Fi(keyword-deli)o(mite)o(r-li) -o(st)f Fv(')630 2485 y(Allo)m(ws)30 b(y)m(ou)f(to)g(pro)m(vide)g(a)g -(string)g(con)m(taining)h(delimiters)g(used)d(to)j(separate)g(k)m(eyw)m -(ords)630 2595 y(from)k(their)h(attributes.)54 b(The)34 -b(default)g(is)h Fr(")p Fv(,)p Fr(")p Fv(.)53 b(This)34 -b(option)h(is)f(essen)m(tial)j(if)d(y)m(ou)h(w)m(an)m(t)630 -2705 y(to)f(use)e(k)m(eyw)m(ords)h(that)h(ha)m(v)m(e)g(em)m(b)s(edded)e -(commas)h(or)g(newlines.)48 b(One)33 b(useful)f(tric)m(k)i(is)630 -2814 y(to)d(use)f(-e'T)-8 b(AB',)33 b(where)c(T)-8 b(AB)31 -b(is)g(the)f(literal)i(tab)f(c)m(haracter.)150 2991 y(`)p -Fr(-t)p Fv(')150 3101 y(`)p Fr(--struct-type)p Fv(')630 -3210 y(Allo)m(ws)h(y)m(ou)g(to)g(include)f(a)g Fr(struct)f -Fv(t)m(yp)s(e)h(declaration)i(for)e(generated)h(co)s(de.)44 -b(An)m(y)31 b(text)630 3320 y(b)s(efore)43 b(a)i(pair)e(of)h -(consecutiv)m(e)i(`)p Fr(\045\045)p Fv(')d(is)h(considered)g(part)f(of) -h(the)g(t)m(yp)s(e)g(declaration.)630 3430 y(Keyw)m(ords)39 -b(and)g(additional)h(\014elds)f(ma)m(y)i(follo)m(w)f(this,)i(one)e -(group)f(of)h(\014elds)f(p)s(er)f(line.)630 3539 y(A)31 -b(set)g(of)g(examples)g(for)f(generating)i(p)s(erfect)e(hash)g(tables)i -(and)e(functions)g(for)g(Ada,)h(C,)630 3649 y(C)p Fr(++)p -Fv(,)24 b(P)m(ascal,)j(Mo)s(dula)c(2,)j(Mo)s(dula)d(3)h(and)f(Ja)m(v)-5 -b(aScript)24 b(reserv)m(ed)f(w)m(ords)g(are)h(distributed)630 -3758 y(with)30 b(this)g(release.)150 3935 y(`)p Fr(--ignore-case)p -Fv(')630 4045 y(Consider)43 b(upp)s(er)f(and)i(lo)m(w)m(er)h(case)g -(ASCI)s(I)e(c)m(haracters)i(as)f(equiv)-5 b(alen)m(t.)83 -b(The)44 b(string)630 4155 y(comparison)28 b(will)h(use)f(a)h(case)g -(insigni\014can)m(t)g(c)m(haracter)h(comparison.)40 b(Note)29 -b(that)g(lo)s(cale)630 4264 y(dep)s(enden)m(t)e(case)i(mappings)f(are)g -(ignored.)40 b(This)28 b(option)g(is)h(therefore)f(not)h(suitable)f(if) -h(a)630 4374 y(prop)s(erly)k(in)m(ternationalized)k(or)d(lo)s(cale)i(a) -m(w)m(are)g(case)f(mapping)f(should)f(b)s(e)h(used.)52 -b(\(F)-8 b(or)630 4483 y(example,)31 b(in)e(a)g(T)-8 -b(urkish)29 b(lo)s(cale,)i(the)f(upp)s(er)d(case)k(equiv)-5 -b(alen)m(t)30 b(of)g(the)g(lo)m(w)m(ercase)h(ASCI)s(I)630 -4593 y(letter)42 b(`)p Fr(i)p Fv(')g(is)f(the)g(non-ASCI)s(I)e(c)m -(haracter)k(`)p Fr(capital)29 b(i)h(with)f(dot)g(above)p -Fv('.\))72 b(F)-8 b(or)42 b(this)630 4702 y(case,)d(it)d(is)g(b)s -(etter)h(to)f(apply)g(an)g(upp)s(ercase)f(or)h(lo)m(w)m(ercase)i(con)m -(v)m(ersion)g(on)e(the)g(string)630 4812 y(b)s(efore)30 -b(passing)g(it)h(to)g(the)g Fr(gperf)e Fv(generated)i(function.)150 -5071 y Fu(4.3)68 b(Options)45 b(to)h(sp)t(ecify)f(the)g(Language)h(for) -f(the)g(Output)f(Co)t(de)275 5230 y Fv(These)e(options)h(are)g(also)g -(a)m(v)-5 b(ailable)45 b(as)e(declarations)h(in)e(the)h(input)f(\014le) -g(\(see)i(Section)f(3.1.1.2)150 5340 y([Gp)s(erf)30 b(Declarations],)j -(page)e(16\).)p eop end -%%Page: 25 27 -TeXDict begin 25 26 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(25)150 299 y(`)p -Fr(-L)30 b Fi(generated-language-name)10 b Fv(')150 408 -y(`)p Fr(--language=)p Fi(generated-lang)o(uage)o(-nam)o(e)g -Fv(')630 518 y(Instructs)33 b Fr(gperf)f Fv(to)i(generate)h(co)s(de)f -(in)f(the)h(language)h(sp)s(eci\014ed)d(b)m(y)i(the)g(option's)g(ar-) -630 628 y(gumen)m(t.)41 b(Languages)31 b(handled)f(are)h(curren)m(tly:) -630 804 y(`)p Fr(KR-C)p Fv(')238 b(Old-st)m(yle)27 b(K&R)f(C.)g(This)f -(language)j(is)f(understo)s(o)s(d)d(b)m(y)i(old-st)m(yle)i(C)e(com-) -1110 914 y(pilers)e(and)g(ANSI)f(C)h(compilers,)i(but)e(ANSI)f(C)h -(compilers)h(ma)m(y)f(\015ag)h(w)m(arn-)1110 1023 y(ings)30 -b(\(or)h(ev)m(en)g(errors\))f(b)s(ecause)h(of)f(lac)m(king)i(`)p -Fr(const)p Fv('.)630 1200 y(`)p Fr(C)p Fv(')382 b(Common)23 -b(C.)f(This)h(language)h(is)f(understo)s(o)s(d)e(b)m(y)i(ANSI)g(C)f -(compilers,)k(and)1110 1310 y(also)k(b)m(y)e(old-st)m(yle)i(C)f -(compilers,)g(pro)m(vided)f(that)i(y)m(ou)f Fr(#define)f(const)f -Fv(to)1110 1419 y(empt)m(y)k(for)f(compilers)h(whic)m(h)f(don't)g(kno)m -(w)h(ab)s(out)f(this)g(k)m(eyw)m(ord.)630 1596 y(`)p -Fr(ANSI-C)p Fv(')142 b(ANSI)39 b(C.)h(This)e(language)j(is)f(understo)s -(o)s(d)e(b)m(y)h(ANSI)g(C)h(compilers)g(and)1110 1705 -y(C)p Fr(++)29 b Fv(compilers.)630 1882 y(`)p Fr(C++)p -Fv(')286 b(C)p Fr(++)p Fv(.)40 b(This)29 b(language)j(is)f(understo)s -(o)s(d)d(b)m(y)i(C)p Fr(++)g Fv(compilers.)630 2058 y(The)g(default)g -(is)h(ANSI-C.)150 2235 y(`)p Fr(-a)p Fv(')334 b(This)33 -b(option)h(is)f(supp)s(orted)f(for)h(compatibilit)m(y)j(with)d -(previous)g(releases)i(of)f Fr(gperf)p Fv(.)49 b(It)630 -2345 y(do)s(es)30 b(not)h(do)f(an)m(ything.)150 2521 -y(`)p Fr(-g)p Fv(')334 b(This)33 b(option)h(is)f(supp)s(orted)f(for)h -(compatibilit)m(y)j(with)d(previous)g(releases)i(of)f -Fr(gperf)p Fv(.)49 b(It)630 2631 y(do)s(es)30 b(not)h(do)f(an)m -(ything.)150 2889 y Fu(4.4)68 b(Options)45 b(for)g(\014ne)g(tuning)g -(Details)i(in)e(the)g(Output)f(Co)t(de)275 3048 y Fv(Most)21 -b(of)g(these)g(options)g(are)g(also)h(a)m(v)-5 b(ailable)23 -b(as)e(declarations)h(in)f(the)g(input)e(\014le)i(\(see)h(Section)f -(3.1.1.2)150 3158 y([Gp)s(erf)30 b(Declarations],)j(page)e(16\).)150 -3343 y(`)p Fr(-K)f Fi(slot-name)11 b Fv(')150 3453 y(`)p -Fr(--slot-name=)p Fi(slot-name)g Fv(')630 3562 y(This)21 -b(option)h(is)g(only)f(useful)g(when)g(option)h(`)p Fr(-t)p -Fv(')f(\(or,)j(equiv)-5 b(alen)m(tly)d(,)26 b(the)c(`)p -Fr(\045struct-type)p Fv(')630 3672 y(declaration\))41 -b(has)e(b)s(een)f(giv)m(en.)67 b(By)39 b(default,)j(the)d(program)g -(assumes)f(the)h(structure)630 3781 y(comp)s(onen)m(t)28 -b(iden)m(ti\014er)h(for)f(the)g(k)m(eyw)m(ord)g(is)h(`)p -Fr(name)p Fv('.)39 b(This)27 b(option)i(allo)m(ws)g(an)f(arbitrary)630 -3891 y(c)m(hoice)33 b(of)f(iden)m(ti\014er)g(for)f(this)h(comp)s(onen)m -(t,)g(although)g(it)g(still)g(m)m(ust)g(o)s(ccur)f(as)h(the)g(\014rst) -630 4001 y(\014eld)e(in)g(y)m(our)g(supplied)f Fr(struct)p -Fv(.)150 4177 y(`)p Fr(-F)h Fi(initializers)11 b Fv(')150 -4287 y(`)p Fr(--initializer-suffix=)p Fi(init)o(iali)o(zers)f -Fv(')630 4396 y(This)21 b(option)h(is)g(only)f(useful)g(when)g(option)h -(`)p Fr(-t)p Fv(')f(\(or,)j(equiv)-5 b(alen)m(tly)d(,)26 -b(the)c(`)p Fr(\045struct-type)p Fv(')630 4506 y(declaration\))34 -b(has)f(b)s(een)e(giv)m(en.)49 b(It)32 b(p)s(ermits)g(to)h(sp)s(ecify)f -(initializers)i(for)f(the)f(structure)630 4615 y(mem)m(b)s(ers)23 -b(follo)m(wing)i Fn(slot-name)30 b Fv(in)23 b(empt)m(y)h(hash)f(table)h -(en)m(tries.)39 b(The)23 b(list)h(of)g(initializers)630 -4725 y(should)37 b(start)i(with)g(a)f(comma.)66 b(By)39 -b(default,)i(the)e(emitted)g(co)s(de)g(will)f(zero-initialize)630 -4835 y(structure)30 b(mem)m(b)s(ers)f(follo)m(wing)j -Fn(slot-name)p Fv(.)150 5011 y(`)p Fr(-H)e Fi(hash-function-name)11 -b Fv(')150 5121 y(`)p Fr(--hash-function-name=)p Fi(hash)o(-fun)o(ctio) -o(n-n)o(ame)f Fv(')630 5230 y(Allo)m(ws)31 b(y)m(ou)f(to)g(sp)s(ecify)g -(the)g(name)g(for)f(the)h(generated)h(hash)e(function.)40 -b(Default)31 b(name)630 5340 y(is)f(`)p Fr(hash)p Fv('.)40 -b(This)30 b(option)h(p)s(ermits)e(the)i(use)f(of)h(t)m(w)m(o)g(hash)f -(tables)h(in)f(the)h(same)g(\014le.)p eop end -%%Page: 26 28 -TeXDict begin 26 27 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(26)150 299 y(`)p -Fr(-N)30 b Fi(lookup-function-name)11 b Fv(')150 408 -y(`)p Fr(--lookup-function-name=)p Fi(lo)o(okup)o(-fun)o(cti)o(on-n)o -(ame)f Fv(')630 518 y(Allo)m(ws)43 b(y)m(ou)f(to)h(sp)s(ecify)e(the)i -(name)f(for)f(the)h(generated)h(lo)s(okup)f(function.)75 -b(Default)630 628 y(name)28 b(is)g(`)p Fr(in_word_set)p -Fv('.)37 b(This)27 b(option)h(p)s(ermits)f(m)m(ultiple)i(generated)f -(hash)f(functions)630 737 y(to)k(b)s(e)f(used)f(in)h(the)h(same)g -(application.)150 938 y(`)p Fr(-Z)f Fi(class-name)11 -b Fv(')150 1048 y(`)p Fr(--class-name=)p Fi(class-name)f -Fv(')630 1157 y(This)66 b(option)i(is)f(only)h(useful)e(when)h(option)g -(`)p Fr(-L)30 b(C++)p Fv(')67 b(\(or,)77 b(equiv)-5 b(alen)m(tly)d(,)79 -b(the)630 1267 y(`)p Fr(\045language=C++)p Fv(')43 b(declaration\))k -(has)f(b)s(een)f(giv)m(en.)88 b(It)46 b(allo)m(ws)h(y)m(ou)f(to)g(sp)s -(ecify)g(the)630 1377 y(name)30 b(of)h(generated)g(C)p -Fr(++)f Fv(class.)41 b(Default)32 b(name)e(is)h Fr(Perfect_Hash)p -Fv(.)150 1577 y(`)p Fr(-7)p Fv(')150 1687 y(`)p Fr(--seven-bit)p -Fv(')630 1797 y(This)36 b(option)i(sp)s(eci\014es)f(that)g(all)h -(strings)f(that)h(will)f(b)s(e)g(passed)f(as)i(argumen)m(ts)f(to)h(the) -630 1906 y(generated)e(hash)e(function)g(and)h(the)g(generated)g(lo)s -(okup)g(function)f(will)h(solely)h(consist)630 2016 y(of)d(7-bit)h -(ASCI)s(I)e(c)m(haracters)j(\(b)m(ytes)f(in)f(the)g(range)h(0..127\).) -51 b(\(Note)35 b(that)f(the)g(ANSI)e(C)630 2125 y(functions)f -Fr(isalnum)f Fv(and)i Fr(isgraph)e Fv(do)i Fm(not)41 -b Fv(guaran)m(tee)33 b(that)g(a)f(b)m(yte)h(is)f(in)f(this)h(range.)630 -2235 y(Only)26 b(an)g(explicit)i(test)g(lik)m(e)f(`)p -Fr(c)k(>=)f('A')f(&&)h(c)g(<=)g('Z')p Fv(')25 b(guaran)m(tees)j -(this.\))40 b(This)26 b(w)m(as)h(the)630 2345 y(default)g(in)g(v)m -(ersions)g(of)g Fr(gperf)e Fv(earlier)j(than)e(2.7;)k(no)m(w)d(the)g -(default)g(is)f(to)i(supp)s(ort)d(8-bit)630 2454 y(and)30 -b(m)m(ultib)m(yte)h(c)m(haracters.)150 2655 y(`)p Fr(-l)p -Fv(')150 2765 y(`)p Fr(--compare-lengths)p Fv(')630 2874 -y(Compare)40 b(k)m(eyw)m(ord)g(lengths)g(b)s(efore)f(trying)h(a)h -(string)e(comparison.)70 b(This)39 b(option)h(is)630 -2984 y(mandatory)32 b(for)h(binary)e(comparisons)i(\(see)g(Section)h -(3.3)f([Binary)g(Strings],)g(page)g(22\).)630 3093 y(It)g(also)h(migh)m -(t)g(cut)f(do)m(wn)f(on)h(the)g(n)m(um)m(b)s(er)f(of)h(string)g -(comparisons)g(made)g(during)f(the)630 3203 y(lo)s(okup,)i(since)g(k)m -(eyw)m(ords)f(with)g(di\013eren)m(t)h(lengths)g(are)f(nev)m(er)h -(compared)f(via)h Fr(strcmp)p Fv(.)630 3313 y(Ho)m(w)m(ev)m(er,)j -(using)c(`)p Fr(-l)p Fv(')g(migh)m(t)h(greatly)h(increase)g(the)f(size) -g(of)g(the)f(generated)i(C)e(co)s(de)h(if)630 3422 y(the)k(lo)s(okup)g -(table)g(range)h(is)f(large)h(\(whic)m(h)f(implies)g(that)g(the)g -(switc)m(h)h(option)f(`)p Fr(-S)p Fv(')g(or)630 3532 -y(`)p Fr(\045switch)p Fv(')29 b(is)i(not)g(enabled\),)h(since)f(the)g -(length)g(table)h(con)m(tains)g(as)f(man)m(y)g(elemen)m(ts)h(as)630 -3641 y(there)f(are)f(en)m(tries)i(in)e(the)g(lo)s(okup)g(table.)150 -3842 y(`)p Fr(-c)p Fv(')150 3952 y(`)p Fr(--compare-strncmp)p -Fv(')630 4061 y(Generates)22 b(C)f(co)s(de)g(that)h(uses)e(the)i -Fr(strncmp)d Fv(function)h(to)i(p)s(erform)e(string)h(comparisons.)630 -4171 y(The)30 b(default)g(action)i(is)f(to)g(use)f Fr(strcmp)p -Fv(.)150 4372 y(`)p Fr(-C)p Fv(')150 4482 y(`)p Fr(--readonly-tables)p -Fv(')630 4591 y(Mak)m(es)41 b(the)f(con)m(ten)m(ts)h(of)f(all)h -(generated)f(lo)s(okup)f(tables)i(constan)m(t,)i(i.e.,)h(\\readonly".) -630 4701 y(Man)m(y)31 b(compilers)g(can)g(generate)h(more)e(e\016cien)m -(t)i(co)s(de)f(for)f(this)h(b)m(y)f(putting)g(the)h(tables)630 -4810 y(in)f(readonly)h(memory)-8 b(.)150 5011 y(`)p Fr(-E)p -Fv(')150 5121 y(`)p Fr(--enum)p Fv(')142 b(De\014ne)31 -b(constan)m(t)g(v)-5 b(alues)31 b(using)f(an)g(en)m(um)g(lo)s(cal)i(to) -f(the)g(lo)s(okup)f(function)g(rather)g(than)630 5230 -y(with)37 b(#de\014nes.)60 b(This)36 b(also)i(means)g(that)f -(di\013eren)m(t)h(lo)s(okup)f(functions)g(can)g(reside)g(in)630 -5340 y(the)31 b(same)f(\014le.)41 b(Thanks)29 b(to)j(James)e(Clark)g -Fr(<jjc@ai.mit.edu>)p Fv(.)p eop end -%%Page: 27 29 -TeXDict begin 27 28 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(27)150 299 y(`)p -Fr(-I)p Fv(')150 408 y(`)p Fr(--includes)p Fv(')630 518 -y(Include)30 b(the)h(necessary)h(system)f(include)g(\014le,)g -Fr(<string.h>)p Fv(,)e(at)i(the)g(b)s(eginning)g(of)g(the)630 -628 y(co)s(de.)39 b(By)27 b(default,)g(this)f(is)g(not)g(done;)i(the)e -(user)f(m)m(ust)h(include)g(this)f(header)h(\014le)g(himself)630 -737 y(to)31 b(allo)m(w)h(compilation)g(of)e(the)h(co)s(de.)150 -897 y(`)p Fr(-G)p Fv(')150 1007 y(`)p Fr(--global-table)p -Fv(')630 1117 y(Generate)38 b(the)f(static)h(table)f(of)g(k)m(eyw)m -(ords)g(as)g(a)g(static)h(global)g(v)-5 b(ariable,)39 -b(rather)d(than)630 1226 y(hiding)30 b(it)h(inside)f(of)g(the)h(lo)s -(okup)f(function)g(\(whic)m(h)g(is)h(the)f(default)h(b)s(eha)m(vior\).) -150 1386 y(`)p Fr(-P)p Fv(')150 1496 y(`)p Fr(--pic)p -Fv(')190 b(Optimize)42 b(the)f(generated)h(table)g(for)f(inclusion)g -(in)g(shared)f(libraries.)73 b(This)40 b(reduces)630 -1606 y(the)35 b(startup)g(time)h(of)f(programs)g(using)g(a)h(shared)e -(library)h(con)m(taining)i(the)e(generated)630 1715 y(co)s(de.)j(If)21 -b(the)h(option)h(`)p Fr(-t)p Fv(')e(\(or,)k(equiv)-5 -b(alen)m(tly)d(,)25 b(the)d(`)p Fr(\045struct-type)p -Fv(')d(declaration\))24 b(is)e(also)630 1825 y(giv)m(en,)32 -b(the)f(\014rst)e(\014eld)i(of)f(the)h(user-de\014ned)e(struct)i(m)m -(ust)f(b)s(e)g(of)h(t)m(yp)s(e)g(`)p Fr(int)p Fv(',)f(not)h(`)p -Fr(char)630 1934 y(*)p Fv(',)h(b)s(ecause)f(it)i(will)e(con)m(tain)i -(o\013sets)g(in)m(to)f(the)g(string)f(p)s(o)s(ol)h(instead)f(of)h -(actual)h(strings.)630 2044 y(T)-8 b(o)33 b(con)m(v)m(ert)h(suc)m(h)f -(an)f(o\013set)i(to)f(a)g(string,)h(y)m(ou)f(can)g(use)f(the)h -(expression)f(`)p Fr(stringpool)630 2153 y(+)e Fi(o)11 -b Fv(',)33 b(where)f Fn(o)37 b Fv(is)c(the)g(o\013set.)48 -b(The)32 b(string)g(p)s(o)s(ol)g(name)h(can)g(b)s(e)f(c)m(hanged)h -(through)f(the)630 2263 y(option)f(`)p Fr(--string-pool-name)p -Fv('.)150 2423 y(`)p Fr(-Q)f Fi(string-pool-name)11 b -Fv(')150 2533 y(`)p Fr(--string-pool-name=)p Fi(string)o(-poo)o(l-na)o -(me)f Fv(')630 2642 y(Allo)m(ws)32 b(y)m(ou)g(to)g(sp)s(ecify)f(the)g -(name)h(of)f(the)h(generated)g(string)f(p)s(o)s(ol)g(created)h(b)m(y)f -(option)630 2752 y(`)p Fr(-P)p Fv('.)38 b(The)21 b(default)g(name)h(is) -f(`)p Fr(stringpool)p Fv('.)36 b(This)20 b(option)i(p)s(ermits)f(the)g -(use)g(of)h(t)m(w)m(o)h(hash)630 2862 y(tables)i(in)e(the)h(same)g -(\014le,)i(with)d(`)p Fr(-P)p Fv(')h(and)f(ev)m(en)h(when)f(the)h -(option)g(`)p Fr(-G)p Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)630 -2971 y(the)31 b(`)p Fr(\045global-table)p Fv(')c(declaration\))32 -b(is)f(giv)m(en.)150 3131 y(`)p Fr(--null-strings)p Fv(')630 -3241 y(Use)39 b(NULL)g(strings)f(instead)i(of)e(empt)m(y)i(strings)e -(for)h(empt)m(y)g(k)m(eyw)m(ord)g(table)h(en)m(tries.)630 -3351 y(This)e(reduces)g(the)h(startup)g(time)g(of)g(programs)g(using)f -(a)h(shared)f(library)g(con)m(taining)630 3460 y(the)j(generated)g(co)s -(de)g(\(but)f(not)h(as)f(m)m(uc)m(h)h(as)g(option)g(`)p -Fr(-P)p Fv('\),)i(at)e(the)g(exp)s(ense)f(of)h(one)630 -3570 y(more)31 b(test-and-branc)m(h)f(instruction)h(at)g(run)e(time.) -150 3730 y(`)p Fr(-W)h Fi(hash-table-array-name)11 b -Fv(')150 3839 y(`)p Fr(--word-array-name=)p Fi(hash-ta)o(ble-)o(arra)o -(y-n)o(ame)f Fv(')630 3949 y(Allo)m(ws)41 b(y)m(ou)f(to)h(sp)s(ecify)f -(the)g(name)g(for)f(the)i(generated)g(arra)m(y)f(con)m(taining)i(the)e -(hash)630 4059 y(table.)106 b(Default)53 b(name)e(is)h(`)p -Fr(wordlist)p Fv('.)103 b(This)51 b(option)h(p)s(ermits)f(the)h(use)g -(of)g(t)m(w)m(o)630 4168 y(hash)37 b(tables)h(in)g(the)g(same)g -(\014le,)i(ev)m(en)e(when)f(the)h(option)g(`)p Fr(-G)p -Fv(')g(\(or,)i(equiv)-5 b(alen)m(tly)d(,)42 b(the)630 -4278 y(`)p Fr(\045global-table)p Fv(')27 b(declaration\))33 -b(is)d(giv)m(en.)150 4413 y(`)p Fr(--length-table-name=)p -Fi(lengt)o(h-ta)o(ble-)o(arr)o(ay-n)o(ame)10 b Fv(')630 -4522 y(Allo)m(ws)36 b(y)m(ou)e(to)i(sp)s(ecify)e(the)h(name)f(for)g -(the)h(generated)h(arra)m(y)f(con)m(taining)h(the)f(length)630 -4632 y(table.)77 b(Default)43 b(name)g(is)f(`)p Fr(lengthtable)p -Fv('.)74 b(This)41 b(option)i(p)s(ermits)e(the)h(use)g(of)h(t)m(w)m(o) -630 4741 y(length)33 b(tables)h(in)f(the)g(same)g(\014le,)h(ev)m(en)g -(when)e(the)h(option)h(`)p Fr(-G)p Fv(')f(\(or,)h(equiv)-5 -b(alen)m(tly)d(,)36 b(the)630 4851 y(`)p Fr(\045global-table)p -Fv(')27 b(declaration\))33 b(is)d(giv)m(en.)150 5011 -y(`)p Fr(-S)g Fi(total-switch-statements)10 b Fv(')150 -5121 y(`)p Fr(--switch=)p Fi(total-switch-sta)o(teme)o(nts)g -Fv(')630 5230 y(Causes)35 b(the)h(generated)h(C)e(co)s(de)h(to)h(use)e -(a)h Fr(switch)e Fv(statemen)m(t)k(sc)m(heme,)g(rather)d(than)630 -5340 y(an)j(arra)m(y)g(lo)s(okup)g(table.)64 b(This)37 -b(can)h(lead)h(to)f(a)h(reduction)f(in)f(b)s(oth)g(time)i(and)e(space)p -eop end -%%Page: 28 30 -TeXDict begin 28 29 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(28)630 299 y(requiremen)m(ts) -43 b(for)h(some)f(input)g(\014les.)80 b(The)43 b(argumen)m(t)h(to)g -(this)f(option)h(determines)630 408 y(ho)m(w)33 b(man)m(y)f -Fr(switch)f Fv(statemen)m(ts)k(are)e(generated.)49 b(A)32 -b(v)-5 b(alue)34 b(of)e(1)i(generates)g(1)f Fr(switch)630 -518 y Fv(con)m(taining)25 b(all)e(the)h(elemen)m(ts,)i(a)d(v)-5 -b(alue)23 b(of)h(2)f(generates)h(2)g(tables)f(with)g(1/2)h(the)g -(elemen)m(ts)630 628 y(in)38 b(eac)m(h)h Fr(switch)p -Fv(,)g(etc.)65 b(This)37 b(is)h(useful)g(since)g(man)m(y)h(C)e -(compilers)i(cannot)g(correctly)630 737 y(generate)29 -b(co)s(de)f(for)f(large)h Fr(switch)e Fv(statemen)m(ts.)41 -b(This)27 b(option)h(w)m(as)g(inspired)e(in)h(part)g(b)m(y)630 -847 y(Keith)k(Bostic's)h(original)f(C)f(program.)150 -1009 y(`)p Fr(-T)p Fv(')150 1118 y(`)p Fr(--omit-struct-type)p -Fv(')630 1228 y(Prev)m(en)m(ts)f(the)e(transfer)h(of)f(the)h(t)m(yp)s -(e)g(declaration)h(to)g(the)f(output)f(\014le.)40 b(Use)28 -b(this)f(option)630 1338 y(if)j(the)h(t)m(yp)s(e)f(is)h(already)g -(de\014ned)e(elsewhere.)150 1500 y(`)p Fr(-p)p Fv(')334 -b(This)33 b(option)h(is)f(supp)s(orted)f(for)h(compatibilit)m(y)j(with) -d(previous)g(releases)i(of)f Fr(gperf)p Fv(.)49 b(It)630 -1609 y(do)s(es)30 b(not)h(do)f(an)m(ything.)150 1845 -y Fu(4.5)68 b(Options)45 b(for)g(c)l(hanging)h(the)f(Algorithms)h -(emplo)l(y)l(ed)g(b)l(y)f Fl(gperf)150 2031 y Fv(`)p -Fr(-k)30 b Fi(selected-byte-positions)10 b Fv(')150 2141 -y(`)p Fr(--key-positions=)p Fi(selected-)o(byte)o(-pos)o(iti)o(ons)g -Fv(')630 2250 y(Allo)m(ws)28 b(selection)h(of)e(the)g(b)m(yte)h(p)s -(ositions)f(used)f(in)h(the)g(k)m(eyw)m(ords')h(hash)e(function.)39 -b(The)630 2360 y(allo)m(w)m(able)24 b(c)m(hoices)g(range)e(b)s(et)m(w)m -(een)h(1-255,)j(inclusiv)m(e.)38 b(The)22 b(p)s(ositions)f(are)i -(separated)f(b)m(y)630 2469 y(commas,)27 b(e.g.,)i(`)p -Fr(-k)h(9,4,13,14)p Fv(';)25 b(ranges)h(ma)m(y)g(b)s(e)f(used,)h(e.g.,) -i(`)p Fr(-k)i(2-7)p Fv(';)d(and)e(p)s(ositions)630 2579 -y(ma)m(y)c(o)s(ccur)f(in)h(an)m(y)g(order.)37 b(F)-8 -b(urthermore,)22 b(the)f(wildcard)f('*')h(causes)g(the)g(generated)h -(hash)630 2689 y(function)37 b(to)h(consider)g Fe(all)g -Fv(b)m(yte)g(p)s(ositions)f(in)g(eac)m(h)i(k)m(eyw)m(ord,)h(whereas)d -('$')h(instructs)630 2798 y(the)31 b(hash)g(function)f(to)i(use)f(the)g -(\\\014nal)h(b)m(yte")g(of)f(a)h(k)m(eyw)m(ord)f(\(this)g(is)h(the)f -(only)g(w)m(a)m(y)h(to)630 2908 y(use)e(a)h(b)m(yte)g(p)s(osition)f -(greater)i(than)e(255,)i(inciden)m(tally\).)630 3043 -y(F)-8 b(or)37 b(instance,)h(the)e(option)h(`)p Fr(-k)30 -b(1,2,4,6-10,'$')p Fv(')i(generates)38 b(a)e(hash)g(function)f(that)630 -3153 y(considers)g(p)s(ositions)g(1,2,4,6,7,8,9,10,)42 -b(plus)34 b(the)i(last)g(b)m(yte)f(in)g(eac)m(h)h(k)m(eyw)m(ord)g -(\(whic)m(h)630 3263 y(ma)m(y)j(b)s(e)f(at)i(a)f(di\013eren)m(t)g(p)s -(osition)g(for)f(eac)m(h)i(k)m(eyw)m(ord,)h(ob)m(viously\).)67 -b(Keyw)m(ords)38 b(with)630 3372 y(length)30 b(less)g(than)f(the)g -(indicated)h(b)m(yte)h(p)s(ositions)e(w)m(ork)g(prop)s(erly)-8 -b(,)30 b(since)f(selected)i(b)m(yte)630 3482 y(p)s(ositions)k -(exceeding)h(the)g(k)m(eyw)m(ord)f(length)g(are)h(simply)e(not)i -(referenced)f(in)f(the)i(hash)630 3591 y(function.)630 -3727 y(This)28 b(option)i(is)f(not)g(normally)g(needed)g(since)g(v)m -(ersion)g(2.8)i(of)e Fr(gperf)p Fv(;)f(the)h(default)g(b)m(yte)630 -3837 y(p)s(ositions)36 b(are)g(computed)f(dep)s(ending)f(on)i(the)f(k)m -(eyw)m(ord)h(set,)i(through)d(a)h(searc)m(h)g(that)630 -3946 y(minimizes)31 b(the)f(n)m(um)m(b)s(er)f(of)i(b)m(yte)g(p)s -(ositions.)150 4108 y(`)p Fr(-D)p Fv(')150 4218 y(`)p -Fr(--duplicates)p Fv(')630 4327 y(Handle)h(k)m(eyw)m(ords)h(whose)f -(selected)i(b)m(yte)e(sets)h(hash)e(to)i(duplicate)g(v)-5 -b(alues.)46 b(Duplicate)630 4437 y(hash)33 b(v)-5 b(alues)34 -b(can)h(o)s(ccur)e(if)h(a)g(set)h(of)f(k)m(eyw)m(ords)g(has)g(the)g -(same)g(names,)h(but)e(p)s(ossesses)630 4547 y(di\013eren)m(t)f -(attributes,)g(or)f(if)h(the)f(selected)i(b)m(yte)f(p)s(ositions)f(are) -h(not)f(w)m(ell)h(c)m(hosen.)44 b(With)630 4656 y(the)36 -b(-D)g(option)g Fr(gperf)e Fv(treats)j(all)f(these)h(k)m(eyw)m(ords)e -(as)h(part)g(of)g(an)f(equiv)-5 b(alence)37 b(class)630 -4766 y(and)31 b(generates)i(a)f(p)s(erfect)g(hash)f(function)g(with)h -(m)m(ultiple)g(comparisons)g(for)f(duplicate)630 4875 -y(k)m(eyw)m(ords.)38 b(It)21 b(is)f(up)g(to)h(y)m(ou)g(to)h(completely) -g(disam)m(biguate)g(the)f(k)m(eyw)m(ords)g(b)m(y)g(mo)s(difying)630 -4985 y(the)28 b(generated)g(C)f(co)s(de.)40 b(Ho)m(w)m(ev)m(er,)30 -b Fr(gperf)c Fv(helps)h(y)m(ou)g(out)h(b)m(y)f(organizing)i(the)e -(output.)630 5121 y(Using)32 b(this)g(option)g(usually)g(means)g(that)g -(the)g(generated)h(hash)e(function)h(is)g(no)f(longer)630 -5230 y(p)s(erfect.)48 b(On)31 b(the)i(other)g(hand,)g(it)g(p)s(ermits)f -Fr(gperf)f Fv(to)i(w)m(ork)g(on)g(k)m(eyw)m(ord)g(sets)g(that)g(it)630 -5340 y(otherwise)e(could)f(not)h(handle.)p eop end -%%Page: 29 31 -TeXDict begin 29 30 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(29)150 299 y(`)p -Fr(-m)30 b Fi(iterations)11 b Fv(')150 408 y(`)p Fr -(--multiple-iterations=)p Fi(ite)o(rati)o(ons)f Fv(')630 -518 y(P)m(erform)24 b(m)m(ultiple)h(c)m(hoices)h(of)e(the)h(`)p -Fr(-i)p Fv(')f(and)g(`)p Fr(-j)p Fv(')g(v)-5 b(alues,)26 -b(and)d(c)m(ho)s(ose)j(the)e(b)s(est)g(results.)630 628 -y(This)34 b(increases)i(the)f(running)e(time)i(b)m(y)g(a)g(factor)h(of) -f Fn(iterations)40 b Fv(but)34 b(do)s(es)g(a)i(go)s(o)s(d)e(job)630 -737 y(minimizing)d(the)f(generated)i(table)f(size.)150 -907 y(`)p Fr(-i)f Fi(initial-value)11 b Fv(')150 1016 -y(`)p Fr(--initial-asso=)p Fi(initial-va)o(lue)f Fv(')630 -1126 y(Pro)m(vides)29 b(an)f(initial)h Fn(v)-5 b(alue)34 -b Fv(for)28 b(the)g(asso)s(ciate)i(v)-5 b(alues)29 b(arra)m(y)-8 -b(.)41 b(Default)29 b(is)f(0.)41 b(Increasing)630 1235 -y(the)30 b(initial)h(v)-5 b(alue)31 b(helps)e(in\015ate)h(the)g -(\014nal)g(table)h(size,)g(p)s(ossibly)e(leading)i(to)f(more)g(time)630 -1345 y(e\016cien)m(t)f(k)m(eyw)m(ord)e(lo)s(okups.)39 -b(Note)29 b(that)e(this)g(option)h(is)f(not)g(particularly)h(useful)e -(when)630 1455 y(`)p Fr(-S)p Fv(')i(\(or,)i(equiv)-5 -b(alen)m(tly)d(,)31 b(`)p Fr(\045switch)p Fv('\))c(is)i(used.)39 -b(Also,)30 b(`)p Fr(-i)p Fv(')e(is)g(o)m(v)m(erridden)h(when)e(the)i(`) -p Fr(-r)p Fv(')630 1564 y(option)i(is)f(used.)150 1733 -y(`)p Fr(-j)g Fi(jump-value)11 b Fv(')150 1843 y(`)p -Fr(--jump=)p Fi(jump-value)g Fv(')630 1953 y(A\013ects)41 -b(the)f(\\jump)f(v)-5 b(alue",)44 b(i.e.,)g(ho)m(w)c(far)g(to)g(adv)-5 -b(ance)41 b(the)f(asso)s(ciated)i(b)m(yte)e(v)-5 b(alue)630 -2062 y(up)s(on)29 b(collisions.)43 b Fn(Jump-v)-5 b(alue)35 -b Fv(is)30 b(rounded)f(up)h(to)h(an)f(o)s(dd)g(n)m(um)m(b)s(er,)f(the)i -(default)g(is)f(5.)630 2172 y(If)g(the)g Fn(jump-v)-5 -b(alue)35 b Fv(is)c(0)f Fr(gperf)f Fv(jumps)g(b)m(y)h(random)g(amoun)m -(ts.)150 2341 y(`)p Fr(-n)p Fv(')150 2451 y(`)p Fr(--no-strlen)p -Fv(')630 2560 y(Instructs)c(the)i(generator)g(not)f(to)h(include)f(the) -h(length)f(of)g(a)h(k)m(eyw)m(ord)g(when)e(computing)630 -2670 y(its)41 b(hash)f(v)-5 b(alue.)72 b(This)40 b(ma)m(y)h(sa)m(v)m(e) -h(a)f(few)f(assem)m(bly)h(instructions)g(in)f(the)h(generated)630 -2780 y(lo)s(okup)30 b(table.)150 2949 y(`)p Fr(-r)p Fv(')150 -3059 y(`)p Fr(--random)p Fv(')630 3168 y(Utilizes)40 -b(randomness)e(to)h(initialize)h(the)f(asso)s(ciated)h(v)-5 -b(alues)38 b(table.)66 b(This)38 b(frequen)m(tly)630 -3278 y(generates)23 b(solutions)e(faster)h(than)f(using)g -(deterministic)h(initialization)i(\(whic)m(h)d(starts)h(all)630 -3387 y(asso)s(ciated)28 b(v)-5 b(alues)28 b(at)f(0\).)40 -b(F)-8 b(urthermore,)28 b(using)f(the)g(randomization)g(option)h -(generally)630 3497 y(increases)j(the)g(size)g(of)f(the)h(table.)150 -3666 y(`)p Fr(-s)f Fi(size-multiple)11 b Fv(')150 3776 -y(`)p Fr(--size-multiple=)p Fi(size-mult)o(iple)f Fv(')630 -3885 y(A\013ects)40 b(the)e(size)h(of)g(the)f(generated)i(hash)d -(table.)66 b(The)38 b(n)m(umeric)g(argumen)m(t)h(for)f(this)630 -3995 y(option)33 b(indicates)g(\\ho)m(w)g(man)m(y)g(times)g(larger)g -(or)f(smaller")i(the)e(maxim)m(um)g(asso)s(ciated)630 -4105 y(v)-5 b(alue)38 b(range)g(should)e(b)s(e,)j(in)e(relationship)h -(to)g(the)f(n)m(um)m(b)s(er)g(of)g(k)m(eyw)m(ords.)62 -b(It)38 b(can)g(b)s(e)630 4214 y(written)g(as)h(an)f(in)m(teger,)43 -b(a)38 b(\015oating-p)s(oin)m(t)i(n)m(um)m(b)s(er)d(or)i(a)f(fraction.) -66 b(F)-8 b(or)39 b(example,)j(a)630 4324 y(v)-5 b(alue)40 -b(of)f(3)h(means)f(\\allo)m(w)i(the)f(maxim)m(um)f(asso)s(ciated)h(v)-5 -b(alue)40 b(to)g(b)s(e)f(ab)s(out)g(3)g(times)630 4433 -y(larger)33 b(than)g(the)g(n)m(um)m(b)s(er)e(of)i(input)f(k)m(eyw)m -(ords".)49 b(Con)m(v)m(ersely)-8 b(,)35 b(a)e(v)-5 b(alue)33 -b(of)g(1/3)h(means)630 4543 y(\\allo)m(w)43 b(the)e(maxim)m(um)f(asso)s -(ciated)j(v)-5 b(alue)41 b(to)h(b)s(e)e(ab)s(out)g(3)h(times)h(smaller) -f(than)g(the)630 4653 y(n)m(um)m(b)s(er)33 b(of)i(input)f(k)m(eyw)m -(ords".)55 b(V)-8 b(alues)35 b(smaller)h(than)e(1)h(are)g(useful)f(for) -h(limiting)h(the)630 4762 y(o)m(v)m(erall)31 b(size)e(of)g(the)f -(generated)i(hash)e(table,)i(though)e(the)g(option)h(`)p -Fr(-m)p Fv(')g(is)f(b)s(etter)h(at)g(this)630 4872 y(purp)s(ose.)630 -5011 y(If)44 b(`generate)h(switc)m(h')g(option)g(`)p -Fr(-S)p Fv(')f(\(or,)k(equiv)-5 b(alen)m(tly)d(,)49 b(`)p -Fr(\045switch)p Fv('\))43 b(is)h Fm(not)54 b Fv(enabled,)630 -5121 y(the)45 b(maxim)m(um)h(asso)s(ciated)g(v)-5 b(alue)46 -b(in\015uences)f(the)g(static)i(arra)m(y)f(table)g(size,)k(and)45 -b(a)630 5230 y(larger)27 b(table)g(should)e(decrease)i(the)f(time)h -(required)e(for)h(an)f(unsuccessful)g(searc)m(h,)j(at)f(the)630 -5340 y(exp)s(ense)j(of)g(extra)i(table)f(space.)p eop -end -%%Page: 30 32 -TeXDict begin 30 31 bop 150 -116 a Fv(Chapter)30 b(4:)41 -b(In)m(v)m(oking)31 b Fr(gperf)2433 b Fv(30)630 299 y(The)35 -b(default)g(v)-5 b(alue)36 b(is)f(1,)i(th)m(us)e(the)h(default)f(maxim) -m(um)g(asso)s(ciated)i(v)-5 b(alue)36 b(ab)s(out)f(the)630 -408 y(same)h(size)g(as)f(the)h(n)m(um)m(b)s(er)e(of)h(k)m(eyw)m(ords)h -(\(for)g(e\016ciency)-8 b(,)38 b(the)d(maxim)m(um)g(asso)s(ciated)630 -518 y(v)-5 b(alue)36 b(is)g(alw)m(a)m(ys)h(rounded)d(up)g(to)i(a)g(p)s -(o)m(w)m(er)g(of)f(2\).)57 b(The)35 b(actual)i(table)g(size)f(ma)m(y)g -(v)-5 b(ary)630 628 y(somewhat,)31 b(since)g(this)f(tec)m(hnique)h(is)g -(essen)m(tially)h(a)f(heuristic.)150 860 y Fu(4.6)68 -b(Informativ)l(e)47 b(Output)150 1044 y Fv(`)p Fr(-h)p -Fv(')150 1154 y(`)p Fr(--help)p Fv(')142 b(Prin)m(ts)24 -b(a)g(short)f(summary)g(on)h(the)g(meaning)g(of)g(eac)m(h)h(program)e -(option.)39 b(Ab)s(orts)23 b(further)630 1264 y(program)30 -b(execution.)150 1423 y(`)p Fr(-v)p Fv(')150 1533 y(`)p -Fr(--version)p Fv(')630 1642 y(Prin)m(ts)g(out)h(the)f(curren)m(t)h(v)m -(ersion)f(n)m(um)m(b)s(er.)150 1802 y(`)p Fr(-d)p Fv(')150 -1911 y(`)p Fr(--debug)p Fv(')94 b(Enables)28 b(the)h(debugging)f -(option.)40 b(This)28 b(pro)s(duces)f(v)m(erb)s(ose)i(diagnostics)g(to) -g(\\standard)630 2021 y(error")i(when)g Fr(gperf)f Fv(is)h(executing.) -45 b(It)32 b(is)f(useful)g(b)s(oth)g(for)g(main)m(taining)i(the)e -(program)630 2130 y(and)f(for)h(determining)g(whether)f(a)h(giv)m(en)h -(set)f(of)g(options)g(is)g(actually)i(sp)s(eeding)d(up)g(the)630 -2240 y(searc)m(h)41 b(for)e(a)h(solution.)70 b(Some)40 -b(useful)f(information)h(is)g(dump)s(ed)e(at)i(the)g(end)g(of)g(the)630 -2350 y(program)30 b(when)g(the)g(`)p Fr(-d)p Fv(')g(option)h(is)g -(enabled.)p eop end -%%Page: 31 33 -TeXDict begin 31 32 bop 150 -116 a Fv(Chapter)30 b(5:)41 -b(Kno)m(wn)30 b(Bugs)g(and)g(Limitations)h(with)f Fr(gperf)1397 -b Fv(31)150 299 y Fs(5)80 b(Kno)l(wn)53 b(Bugs)f(and)i(Limitations)f -(with)f Fo(gperf)275 533 y Fv(The)29 b(follo)m(wing)j(are)f(some)g -(limitations)h(with)e(the)g(curren)m(t)h(release)g(of)g -Fr(gperf)p Fv(:)225 667 y Ft(\017)60 b Fv(The)31 b Fr(gperf)g -Fv(utilit)m(y)i(is)f(tuned)f(to)h(execute)h(quic)m(kly)-8 -b(,)34 b(and)d(w)m(orks)h(quic)m(kly)g(for)g(small)g(to)h(medium)330 -777 y(size)i(data)g(sets)g(\(around)f(1000)i(k)m(eyw)m(ords\).)54 -b(It)34 b(is)h(extremely)h(useful)d(for)h(main)m(taining)i(p)s(erfect) -330 887 y(hash)k(functions)h(for)f(compiler)i(k)m(eyw)m(ord)f(sets.)72 -b(Sev)m(eral)42 b(recen)m(t)g(enhancemen)m(ts)g(no)m(w)e(enable)330 -996 y Fr(gperf)31 b Fv(to)j(w)m(ork)e(e\016cien)m(tly)j(on)d(m)m(uc)m -(h)h(larger)g(k)m(eyw)m(ord)g(sets)g(\(o)m(v)m(er)i(15,000)g(k)m(eyw)m -(ords\).)48 b(When)330 1106 y(pro)s(cessing)30 b(large)i(k)m(eyw)m(ord) -e(sets)h(it)g(helps)f(greatly)i(to)f(ha)m(v)m(e)g(o)m(v)m(er)h(8)f -(megs)g(of)f(RAM.)225 1240 y Ft(\017)60 b Fv(The)43 b(size)i(of)f(the)g -(generate)h(static)h(k)m(eyw)m(ord)e(arra)m(y)g(can)g(get)h -Fm(extr)-5 b(emely)53 b Fv(large)45 b(if)f(the)g(input)330 -1350 y(k)m(eyw)m(ord)d(\014le)f(is)g(large)i(or)e(if)g(the)h(k)m(eyw)m -(ords)f(are)h(quite)g(similar.)70 b(This)40 b(tends)g(to)h(slo)m(w)f -(do)m(wn)330 1460 y(the)35 b(compilation)h(of)f(the)f(generated)i(C)e -(co)s(de,)i(and)e Fm(gr)-5 b(e)g(atly)44 b Fv(in\015ates)35 -b(the)g(ob)5 b(ject)35 b(co)s(de)g(size.)54 b(If)330 -1569 y(this)40 b(situation)h(o)s(ccurs,)h(consider)e(using)f(the)h(`)p -Fr(-S)p Fv(')g(option)g(to)h(reduce)e(data)i(size,)i(p)s(oten)m(tially) -330 1679 y(increasing)h(k)m(eyw)m(ord)g(recognition)h(time)f(a)g -(negligible)i(amoun)m(t.)80 b(Since)44 b(man)m(y)f(C)h(compilers)330 -1788 y(cannot)37 b(correctly)i(generate)f(co)s(de)f(for)g(large)h -(switc)m(h)f(statemen)m(ts)i(it)e(is)g(imp)s(ortan)m(t)g(to)h(qualify) -330 1898 y(the)i Fn(-S)46 b Fv(option)40 b(with)g(an)g(appropriate)g(n) -m(umerical)h(argumen)m(t)f(that)h(con)m(trols)h(the)e(n)m(um)m(b)s(er)f -(of)330 2007 y(switc)m(h)31 b(statemen)m(ts)h(generated.)225 -2142 y Ft(\017)60 b Fv(The)35 b(maxim)m(um)g(n)m(um)m(b)s(er)f(of)i -(selected)h(b)m(yte)f(p)s(ositions)f(has)g(an)h(arbitrary)f(limit)h(of) -g(255.)57 b(This)330 2252 y(restriction)29 b(should)e(b)s(e)g(remo)m(v) -m(ed,)j(and)d(if)h(an)m(y)m(one)h(considers)f(this)g(a)g(problem)f -(write)i(me)f(and)f(let)330 2361 y(me)j(kno)m(w)h(so)f(I)h(can)f(remo)m -(v)m(e)i(the)f(constrain)m(t.)p eop end -%%Page: 32 34 -TeXDict begin 32 33 bop 150 -116 a Fv(Chapter)30 b(6:)41 -b(Things)29 b(Still)i(Left)g(to)g(Do)2133 b(32)150 299 -y Fs(6)80 b(Things)53 b(Still)g(Left)g(to)g(Do)275 533 -y Fv(It)24 b(should)f(b)s(e)h(\\relativ)m(ely")k(easy)d(to)g(replace)g -(the)g(curren)m(t)f(p)s(erfect)g(hash)g(function)g(algorithm)h(with)150 -643 y(a)35 b(more)f(exhaustiv)m(e)h(approac)m(h;)i(the)d(p)s(erfect)h -(hash)e(mo)s(dule)h(is)g(essen)m(tial)i(indep)s(enden)m(t)d(from)h -(other)150 752 y(program)c(mo)s(dules.)40 b(Additional)31 -b(w)m(orth)m(while)g(impro)m(v)m(emen)m(ts)h(include:)225 -887 y Ft(\017)60 b Fv(Another)34 b(useful)f(extension)h(in)m(v)m(olv)m -(es)i(mo)s(difying)d(the)h(program)f(to)i(generate)g(\\minimal")g(p)s -(er-)330 996 y(fect)42 b(hash)f(functions)f(\(under)h(certain)h -(circumstances,)j(the)c(curren)m(t)g(v)m(ersion)h(can)f(b)s(e)g(rather) -330 1106 y(extra)m(v)-5 b(agan)m(t)39 b(in)d(the)h(generated)g(table)g -(size\).)60 b(This)36 b(is)g(mostly)h(of)g(theoretical)h(in)m(terest,)i -(since)330 1215 y(a)f(sparse)f(table)h(often)g(pro)s(duces)e(faster)i -(lo)s(okups,)h(and)e(use)g(of)h(the)g(`)p Fr(-S)p Fv(')f -Fr(switch)f Fv(option)i(can)330 1325 y(minimize)g(the)g(data)g(size,)j -(at)d(the)g(exp)s(ense)f(of)h(sligh)m(tly)h(longer)f(lo)s(okups)f -(\(note)i(that)f(the)g(gcc)330 1435 y(compiler)e(generally)g(pro)s -(duces)e(go)s(o)s(d)h(co)s(de)g(for)g Fr(switch)f Fv(statemen)m(ts,)k -(reducing)d(the)g(need)g(for)330 1544 y(more)31 b(complex)g(sc)m -(hemes\).)225 1679 y Ft(\017)60 b Fv(In)38 b(addition)h(to)h(impro)m -(ving)f(the)h(algorithm,)i(it)d(w)m(ould)g(also)h(b)s(e)f(useful)f(to)h -(generate)i(an)e(Ada)330 1788 y(pac)m(k)-5 b(age)32 b(as)f(the)g(co)s -(de)f(output,)g(in)g(addition)h(to)g(the)g(curren)m(t)f(C)g(and)g(C)p -Fr(++)f Fv(routines.)p eop end -%%Page: 33 35 -TeXDict begin 33 34 bop 150 -116 a Fv(Chapter)30 b(7:)41 -b(Bibliograph)m(y)2536 b(33)150 299 y Fs(7)80 b(Bibliograph)l(y)150 -533 y Fv([1])35 b(Chang,)f(C.C.:)47 b Fm(A)36 b(Scheme)g(for)g -(Constructing)h(Or)-5 b(der)g(e)g(d)37 b(Minimal)f(Perfe)-5 -b(ct)36 b(Hashing)g(F)-7 b(unctions)150 643 y Fv(Information)30 -b(Sciences)h(39\(1986\),)j(187-195.)150 777 y([2])23 -b(Cic)m(helli,)j(Ric)m(hard)c(J.)h Fm(A)n(uthor's)i(R)-5 -b(esp)g(onse)28 b(to)e(\\On)e(Cichel)5 b(li's)26 b(Minimal)f(Perfe)-5 -b(ct)25 b(Hash)h(F)-7 b(unctions)150 887 y(Metho)i(d")38 -b Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g(23,)g(12\(Decem)m(b)s -(er)i(1980\),)g(729.)150 1021 y([3])h(Cic)m(helli,)i(Ric)m(hard)e(J.)f -Fm(Minimal)j(Perfe)-5 b(ct)35 b(Hash)h(F)-7 b(unctions)36 -b(Made)g(Simple)41 b Fv(Comm)m(unications)34 b(of)150 -1131 y(the)d(A)m(CM,)g(23,)g(1\(Jan)m(uary)g(1980\),)i(17-19.)150 -1265 y([4])f(Co)s(ok,)g(C.)f(R.)g(and)g(Oldeho)s(eft,)h(R.R.)f -Fm(A)i(L)-5 b(etter)34 b(Oriente)-5 b(d)34 b(Minimal)g(Perfe)-5 -b(ct)33 b(Hashing)h(F)-7 b(unction)150 1375 y Fv(SIGPLAN)30 -b(Notices,)i(17,)g(9\(Septem)m(b)s(er)f(1982\),)h(18-27.)150 -1509 y([5])g(Cormac)m(k,)g(G.)g(V.)g(and)e(Horsp)s(o)s(ol,)i(R.)f(N.)g -(S.)g(and)g(Kaiserw)m(erth,)h(M.)g Fm(Pr)-5 b(actic)g(al)34 -b(Perfe)-5 b(ct)34 b(Hashing)150 1619 y Fv(Computer)c(Journal,)g(28,)h -(1\(Jan)m(uary)g(1985\),)i(54-58.)150 1753 y([6])40 b(Jaesc)m(hk)m(e,)j -(G.)d Fm(R)-5 b(e)g(cipr)g(o)g(c)g(al)44 b(Hashing:)58 -b(A)40 b(Metho)-5 b(d)42 b(for)f(Gener)-5 b(ating)42 -b(Minimal)f(Perfe)-5 b(ct)41 b(Hashing)150 1863 y(F)-7 -b(unctions)39 b Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g(24,)g -(12\(Decem)m(b)s(er)i(1981\),)g(829-833.)150 1998 y([7])g(Jaesc)m(hk)m -(e,)i(G.)d(and)g(Osterburg,)g(G.)h Fm(On)h(Cichel)5 b(li's)34 -b(Minimal)h(Perfe)-5 b(ct)34 b(Hash)h(F)-7 b(unctions)35 -b(Metho)-5 b(d)150 2107 y Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,) -g(23,)h(12\(Decem)m(b)s(er)g(1980\),)h(728-729.)150 2242 -y([8])j(Sager,)i(Thomas)d(J.)g Fm(A)i(Polynomial)i(Time)e(Gener)-5 -b(ator)40 b(for)e(Minimal)f(Perfe)-5 b(ct)37 b(Hash)h(F)-7 -b(unctions)150 2351 y Fv(Comm)m(unications)31 b(of)f(the)h(A)m(CM,)g -(28,)h(5\(Decem)m(b)s(er)g(1985\),)g(523-532)150 2486 -y([9])25 b(Sc)m(hmidt,)h(Douglas)f(C.)f Fm(GPERF:)j(A)g(Perfe)-5 -b(ct)27 b(Hash)g(F)-7 b(unction)28 b(Gener)-5 b(ator)36 -b Fv(Second)24 b(USENIX)g(C)p Fr(++)150 2595 y Fv(Conference)30 -b(Pro)s(ceedings,)h(April)f(1990.)150 2730 y([10])i(Sc)m(hmidt,)f -(Douglas)h(C.)f Fm(GPERF:)i(A)f(Perfe)-5 b(ct)33 b(Hash)h(F)-7 -b(unction)33 b(Gener)-5 b(ator)43 b Fv(C)p Fr(++)30 b -Fv(Rep)s(ort,)h(SIGS)150 2839 y(10)g(10)g(\(No)m(v)m(em)m(b)s(er/Decem) -m(b)s(er)j(1998\).)150 2974 y([11])h(Seb)s(esta,)g(R.W.)g(and)e(T)-8 -b(a)m(ylor,)37 b(M.A.)e Fm(Minimal)h(Perfe)-5 b(ct)36 -b(Hash)g(F)-7 b(unctions)37 b(for)f(R)-5 b(eserve)g(d)38 -b(Wor)-5 b(d)150 3083 y(Lists)38 b Fv(SIGPLAN)30 b(Notices,)j(20,)e -(12\(Septem)m(b)s(er)g(1985\),)i(47-53.)150 3218 y([12])f(Sprugnoli,)d -(R.)h Fm(Perfe)-5 b(ct)33 b(Hashing)g(F)-7 b(unctions:)42 -b(A)32 b(Single)h(Pr)-5 b(ob)g(e)33 b(R)-5 b(etrieving)33 -b(Metho)-5 b(d)33 b(for)g(Static)150 3328 y(Sets)38 b -Fv(Comm)m(unications)31 b(of)g(the)f(A)m(CM,)h(20)h(11\(No)m(v)m(em)m -(b)s(er)g(1977\),)h(841-850.)150 3462 y([13])f(Stallman,)f(Ric)m(hard)f -(M.)h Fm(Using)h(and)i(Porting)f(GNU)f(CC)43 b Fv(F)-8 -b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 b(1988.)150 -3597 y([14])g(Stroustrup,)d(Bjarne)h Fm(The)j(C)p Fr(++)f -Fm(Pr)-5 b(o)g(gr)g(amming)35 b(L)-5 b(anguage.)41 b -Fv(Addison-W)-8 b(esley)g(,)32 b(1986.)150 3731 y([15])g(Tiemann,)e -(Mic)m(hael)i(D.)f Fm(User's)i(Guide)f(to)i(GNU)e(C)p -Fr(++)d Fv(F)-8 b(ree)32 b(Soft)m(w)m(are)f(F)-8 b(oundation,)32 -b(1989.)p eop end -%%Page: 34 36 -TeXDict begin 34 35 bop 150 -116 a Fv(Concept)31 b(Index)2927 -b(34)150 299 y Fs(Concept)52 b(Index)150 638 y Fu(\045)150 -757 y Fd(`)p Fp(\045\045)p Fd(')24 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)49 b Fd(16)150 846 y(`)p Fp(\045{)p Fd(')24 b Fc(:)13 -b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 b Fd(19)150 934 y(`)p -Fp(\045})p Fd(')24 b Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 -b Fd(19)150 1023 y(`)p Fp(\0457bit)p Fd(')15 b Fc(:)g(:)e(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 -b Fd(18)150 1112 y(`)p Fp(\045compare-lengths)p Fd(')26 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 -1201 y(`)p Fp(\045compare-strncmp)p Fd(')26 b Fc(:)13 -b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 1289 -y(`)p Fp(\045define)28 b(class-name)p Fd(')6 b Fc(:)15 -b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)32 b Fd(18)150 1378 y(`)p -Fp(\045define)c(hash-function-name)p Fd(')c Fc(:)13 b(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 b Fd(17)150 -1467 y(`)p Fp(\045define)28 b(initializer-suffix)p Fd(')c -Fc(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)46 -b Fd(17)150 1555 y(`)p Fp(\045define)28 b(length-table-name)p -Fd(')e Fc(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)49 b Fd(19)150 1644 y(`)p Fp(\045define)28 b -(lookup-function-name)p Fd(')15 b Fc(:)i(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)41 b Fd(17)150 1733 y(`)p Fp(\045define)28 -b(slot-name)p Fd(')9 b Fc(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 -b Fd(17)150 1821 y(`)p Fp(\045define)28 b(string-pool-name)p -Fd(')8 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)34 b Fd(19)150 1910 y(`)p Fp(\045define)28 -b(word-array-name)p Fd(')10 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fd(19)150 -1999 y(`)p Fp(\045delimiters)p Fd(')17 b Fc(:)f(:)e(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)43 b Fd(17)150 2087 y(`)p -Fp(\045enum)p Fd(')15 b Fc(:)g(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)42 b Fd(18)150 -2176 y(`)p Fp(\045global-table)p Fd(')12 b Fc(:)17 b(:)c(:)g(:)g(:)g(:) -g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 b Fd(18)150 2265 y(`)p -Fp(\045ignore-case)p Fd(')15 b Fc(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)41 b Fd(17)150 2353 y(`)p Fp(\045includes)p -Fd(')25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)49 b Fd(18)150 2442 y(`)p Fp(\045language)p -Fd(')25 b Fc(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)49 b Fd(17)150 2531 y(`)p Fp(\045null-strings)p -Fd(')12 b Fc(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)38 -b Fd(19)150 2619 y(`)p Fp(\045omit-struct-type)p Fd(')23 -b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)45 b Fd(19)150 -2708 y(`)p Fp(\045pic)p Fd(')18 b Fc(:)d(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)44 -b Fd(18)150 2797 y(`)p Fp(\045readonly-tables)p Fd(')26 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fd(18)150 -2885 y(`)p Fp(\045struct-type)p Fd(')15 b Fc(:)h(:)d(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 b Fd(17)150 2974 y(`)p -Fp(\045switch)p Fd(')10 b Fc(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fd(19)150 -3223 y Fu(A)150 3342 y Fd(Arra)n(y)25 b(name)c Fc(:)13 -b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)47 -b Fd(27)150 3599 y Fu(B)150 3718 y Fd(Bugs)18 b Fc(:)c(:)f(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)44 b Fd(12)150 3976 y Fu(C)150 4095 y Fd(Class)27 -b(name)13 b Fc(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)39 b Fd(26)150 4183 y(Cop)n(yrigh)n(t)19 -b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)45 b Fd(23)2025 638 y Fu(D)2025 755 y Fd(Declaration)27 -b(section)18 b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)44 -b Fd(15)2025 842 y(Delimiters)13 b Fc(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)40 b Fd(24)2025 -930 y(Duplicates)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fd(28)2025 1181 -y Fu(F)2025 1298 y Fd(F)-6 b(ormat)13 b Fc(:)g(:)g(:)g(:)g(:)g(:)h(:)f -(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)39 -b Fd(15)2025 1385 y(F)-6 b(unctions)25 b(section)14 b -Fc(:)g(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)41 -b Fd(15)2025 1620 y Fu(H)2025 1737 y Fp(hash)23 b Fc(:)13 -b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)49 b Fd(21)2025 1824 y(hash)25 -b(table)13 b Fc(:)h(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)g(:)40 b Fd(21)2025 2059 y Fu(I)2025 -2176 y Fp(in_word_set)24 b Fc(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) -g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)g(:)48 b Fd(22)2025 2263 y(Initializers)10 -b Fc(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h -(:)f(:)g(:)36 b Fd(25)2025 2498 y Fu(J)2025 2615 y Fd(Jump)25 -b(v)l(alue)9 b Fc(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) -g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)g(:)h(:)f(:)g(:)g(:)36 b Fd(29)2025 2866 y Fu(K)2025 -2983 y Fd(Keyw)n(ords)25 b(section)13 b Fc(:)h(:)f(:)g(:)h(:)f(:)g(:)g -(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) -g(:)g(:)h(:)f(:)g(:)39 b Fd(15)2025 3234 y Fu(M)2025 -3351 y Fd(Minimal)27 b(p)r(erfect)f(hash)g(functions)21 -b Fc(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) -48 b Fd(14)2025 3602 y Fu(N)2025 3719 y Fd(NUL)18 b Fc(:)13 -b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g -(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)46 b Fd(22)2025 3954 y Fu(S)2025 -4070 y Fd(Slot)26 b(name)17 b Fc(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g -(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)44 b Fd(25)2025 -4158 y(Static)26 b(searc)n(h)g(structure)11 b Fc(:)i(:)g(:)g(:)g(:)h(:) -f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g -(:)g(:)38 b Fd(14)2025 4245 y Fp(switch)6 b Fc(:)15 b(:)e(:)g(:)g(:)g -(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) -h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)33 -b Fd(22,)27 b(27)p eop end -%%Page: -1 37 -TeXDict begin -1 36 bop 3725 -116 a Fv(i)150 299 y Fs(T)-13 -b(able)53 b(of)h(Con)l(ten)l(ts)150 641 y Fu(GNU)45 b(GENERAL)g(PUBLIC) -g(LICENSE)28 b Fb(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)73 -b Fu(1)150 911 y(Con)l(tributors)46 b(to)f(GNU)g Fl(gperf)e -Fu(Utilit)l(y)21 b Fb(:)g(:)f(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f -(:)g(:)66 b Fu(12)150 1181 y(1)135 b(In)l(tro)t(duction)32 -b Fb(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) -h(:)76 b Fu(13)150 1450 y(2)135 b(Static)45 b(searc)l(h)h(structures)f -(and)f(GNU)h Fl(gperf)33 b Fb(:)19 b(:)h(:)f(:)80 b Fu(14)150 -1720 y(3)135 b(High-Lev)l(el)46 b(Description)g(of)f(GNU)g -Fl(gperf)24 b Fb(:)18 b(:)h(:)g(:)h(:)f(:)h(:)69 b Fu(15)275 -1857 y Fv(3.1)92 b(Input)29 b(F)-8 b(ormat)31 b(to)g -Fr(gperf)14 b Fa(:)g(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)43 b Fv(15)399 1967 -y(3.1.1)93 b(Declarations)30 b Fa(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) -h(:)57 b Fv(15)524 2076 y(3.1.1.1)93 b(User-supplied)30 -b Fr(struct)12 b Fa(:)h(:)j(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -g(:)42 b Fv(16)524 2186 y(3.1.1.2)93 b(Gp)s(erf)30 b(Declarations)23 -b Fa(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -53 b Fv(16)524 2296 y(3.1.1.3)93 b(C)30 b(Co)s(de)g(Inclusion)15 -b Fa(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)45 b Fv(19)399 2405 y(3.1.2)93 b(F)-8 b(ormat)32 -b(for)e(Keyw)m(ord)g(En)m(tries)15 b Fa(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) -h(:)f(:)h(:)f(:)45 b Fv(20)399 2515 y(3.1.3)93 b(Including)29 -b(Additional)i(C)f(F)-8 b(unctions)11 b Fa(:)17 b(:)e(:)h(:)f(:)g(:)h -(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) -f(:)41 b Fv(21)399 2624 y(3.1.4)93 b(Where)31 b(to)g(place)g(directiv)m -(es)h(for)e(GNU)h Fr(indent)p Fv(.)17 b Fa(:)d(:)h(:)h(:)f(:)h(:)f(:)g -(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)47 b Fv(21)275 2734 y(3.2)92 -b(Output)29 b(F)-8 b(ormat)32 b(for)e(Generated)h(C)f(Co)s(de)g(with)g -Fr(gperf)20 b Fa(:)13 b(:)j(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) -49 b Fv(21)275 2844 y(3.3)92 b(Use)30 b(of)h(NUL)f(b)m(ytes)18 -b Fa(:)e(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h -(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)47 b Fv(22)275 -2953 y(3.4)92 b(The)29 b(Cop)m(yrigh)m(t)i(of)g(the)g(Output)11 -b Fa(:)j(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)41 -b Fv(23)150 3196 y Fu(4)135 b(In)l(v)l(oking)45 b Fl(gperf)25 -b Fb(:)18 b(:)h(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)70 -b Fu(24)275 3333 y Fv(4.1)92 b(Sp)s(ecifying)29 b(the)i(Lo)s(cation)h -(of)e(the)h(Output)e(File)d Fa(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)55 b Fv(24)275 -3442 y(4.2)92 b(Options)30 b(that)h(a\013ect)g(In)m(terpretation)h(of)e -(the)h(Input)e(File)23 b Fa(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f -(:)h(:)52 b Fv(24)275 3552 y(4.3)92 b(Options)30 b(to)h(sp)s(ecify)f -(the)g(Language)i(for)e(the)g(Output)g(Co)s(de)c Fa(:)15 -b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)56 b Fv(24)275 3661 y(4.4)92 -b(Options)30 b(for)g(\014ne)f(tuning)h(Details)j(in)d(the)g(Output)f -(Co)s(de)19 b Fa(:)c(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)49 -b Fv(25)275 3771 y(4.5)92 b(Options)30 b(for)g(c)m(hanging)h(the)g -(Algorithms)g(emplo)m(y)m(ed)g(b)m(y)f Fr(gperf)10 b -Fa(:)k(:)i(:)f(:)h(:)f(:)g(:)40 b Fv(28)275 3880 y(4.6)92 -b(Informativ)m(e)31 b(Output)21 b Fa(:)14 b(:)i(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) -h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)51 -b Fv(30)150 4123 y Fu(5)135 b(Kno)l(wn)45 b(Bugs)f(and)h(Limitations)i -(with)e Fl(gperf)23 b Fb(:)17 b(:)i(:)h(:)67 b Fu(31)150 -4393 y(6)135 b(Things)44 b(Still)i(Left)g(to)f(Do)18 -b Fb(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) -h(:)f(:)h(:)f(:)g(:)h(:)f(:)63 b Fu(32)150 4663 y(7)135 -b(Bibliograph)l(y)25 b Fb(:)20 b(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h -(:)f(:)h(:)f(:)h(:)f(:)g(:)70 b Fu(33)150 4932 y(Concept)45 -b(Index)18 b Fb(:)i(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f -(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) -f(:)h(:)f(:)h(:)f(:)63 b Fu(34)p eop end -%%Trailer - -userdict /end-hook known{end-hook}if -%%EOF diff --git a/doc/gperf_1.html b/doc/gperf_1.html deleted file mode 100644 index 3b663ca..0000000 --- a/doc/gperf_1.html +++ /dev/null @@ -1,825 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - GNU GENERAL PUBLIC LICENSE</TITLE> -</HEAD> -<BODY> -Go to the first, previous, <A HREF="gperf_2.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - -<P> -Copyright (C) 1989-2009 Free Software Foundation, Inc. - -</P> - -<P> -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -</P> -<P> -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -section entitled “GNU General Public License” is included -exactly as in the original, and provided that the entire resulting -derived work is distributed under the terms of a permission notice -identical to this one. - -</P> -<P> -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that the section entitled “GNU General Public License” may be -included in a translation approved by the author instead of in the -original English. - -</P> - - - -<H1><A NAME="SEC1" HREF="gperf_toc.html#TOC1">GNU GENERAL PUBLIC LICENSE</A></H1> -<P> -Version 3, 29 June 2007 - -</P> - - -<PRE> -Copyright (C) 2007 Free Software Foundation, Inc. <A HREF="http://fsf.org/">http://fsf.org/</A> - -Everyone is permitted to copy and distribute verbatim copies of this -license document, but changing it is not allowed. -</PRE> - - -<H2>1.0 Preamble</H2> - -<P> -The GNU General Public License is a free, copyleft license for -software and other kinds of works. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -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. - -</P> -<P> -The precise terms and conditions for copying, distribution and -modification follow. - -</P> - -<H2>1.1 TERMS AND CONDITIONS</H2> - - -<OL> -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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: - - -<OL> -<LI> - -The work must carry prominent notices stating that you modified it, -and giving a relevant date. - -<LI> - -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”. - -<LI> - -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. - -<LI> - -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. -</OL> - -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. - -<LI>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: - - -<OL> -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -<LI> - -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. - -</OL> - -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. - -<LI>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: - - -<OL> -<LI> - -Disclaiming warranty or limiting liability differently from the terms -of sections 15 and 16 of this License; or - -<LI> - -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 - -<LI> - -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 - -<LI> - -Limiting the use for publicity purposes of names of licensors or -authors of the material; or - -<LI> - -Declining to grant rights under trademark law for use of some trade -names, trademarks, or service marks; or - -<LI> - -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. -</OL> - -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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -<LI>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. - -</OL> - - -<H2>1.2 END OF TERMS AND CONDITIONS</H2> - - -<H2>1.3 How to Apply These Terms to Your New Programs</H2> - -<P> -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. - -</P> -<P> -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. - -</P> - -<PRE> -<VAR>one line to give the program's name and a brief idea of what it does.</VAR> -Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR> - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or (at -your option) any later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see <A HREF="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</A>. -</PRE> - -<P> -Also add information on how to contact you by electronic and paper mail. - -</P> -<P> -If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - -</P> - -<PRE> -<VAR>program</VAR> Copyright (C) <VAR>year</VAR> <VAR>name of author</VAR> -This program comes with ABSOLUTELY NO WARRANTY; for details type <SAMP>‘show w’</SAMP>. -This is free software, and you are welcome to redistribute it -under certain conditions; type <SAMP>‘show c’</SAMP> for details. -</PRE> - -<P> -The hypothetical commands <SAMP>‘show w’</SAMP> and <SAMP>‘show c’</SAMP> 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”. - -</P> -<P> -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 -<A HREF="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</A>. - -</P> -<P> -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 <A HREF="http://www.gnu.org/philosophy/why-not-lgpl.html">http://www.gnu.org/philosophy/why-not-lgpl.html</A>. - -</P> -<P><HR><P> -Go to the first, previous, <A HREF="gperf_2.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_10.html b/doc/gperf_10.html deleted file mode 100644 index a3d3e17..0000000 --- a/doc/gperf_10.html +++ /dev/null @@ -1,135 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - Concept Index</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_9.html">previous</A>, next, last section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC27" HREF="gperf_toc.html#TOC27">Concept Index</A></H1> - -<P> -Jump to: -<A HREF="#cindex_&">&</A> -- -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_b">b</A> -- -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_d">d</A> -- -<A HREF="#cindex_f">f</A> -- -<A HREF="#cindex_h">h</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_j">j</A> -- -<A HREF="#cindex_k">k</A> -- -<A HREF="#cindex_m">m</A> -- -<A HREF="#cindex_n">n</A> -- -<A HREF="#cindex_s">s</A> -<P> -<H2><A NAME="cindex_&">&</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX8"><SAMP>‘%%’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX18"><SAMP>‘%7bit’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX19"><SAMP>‘%compare-lengths’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX20"><SAMP>‘%compare-strncmp’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX17"><SAMP>‘%define class-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX15"><SAMP>‘%define hash-function-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX14"><SAMP>‘%define initializer-suffix’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX29"><SAMP>‘%define length-table-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX16"><SAMP>‘%define lookup-function-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX13"><SAMP>‘%define slot-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX26"><SAMP>‘%define string-pool-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX28"><SAMP>‘%define word-array-name’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX9"><SAMP>‘%delimiters’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX22"><SAMP>‘%enum’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX24"><SAMP>‘%global-table’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX11"><SAMP>‘%ignore-case’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX23"><SAMP>‘%includes’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX12"><SAMP>‘%language’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX27"><SAMP>‘%null-strings’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX31"><SAMP>‘%omit-struct-type’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX25"><SAMP>‘%pic’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX21"><SAMP>‘%readonly-tables’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX10"><SAMP>‘%struct-type’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX30"><SAMP>‘%switch’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX32"><SAMP>‘%{’</SAMP></A> -<LI><A HREF="gperf_5.html#IDX33"><SAMP>‘%}’</SAMP></A> -</DIR> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="gperf_6.html#IDX44">Array name</A>, <A HREF="gperf_6.html#IDX45">Array name</A> -</DIR> -<H2><A NAME="cindex_b">b</A></H2> -<DIR> -<LI><A HREF="gperf_2.html#IDX1">Bugs</A> -</DIR> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="gperf_6.html#IDX43">Class name</A> -<LI><A HREF="gperf_5.html#IDX39">Copyright</A> -</DIR> -<H2><A NAME="cindex_d">d</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX5">Declaration section</A> -<LI><A HREF="gperf_6.html#IDX40">Delimiters</A> -<LI><A HREF="gperf_6.html#IDX47">Duplicates</A> -</DIR> -<H2><A NAME="cindex_f">f</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX4">Format</A> -<LI><A HREF="gperf_5.html#IDX7">Functions section</A> -</DIR> -<H2><A NAME="cindex_h">h</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX35">hash</A> -<LI><A HREF="gperf_5.html#IDX34">hash table</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX36">in_word_set</A> -<LI><A HREF="gperf_6.html#IDX42">Initializers</A> -</DIR> -<H2><A NAME="cindex_j">j</A></H2> -<DIR> -<LI><A HREF="gperf_6.html#IDX48">Jump value</A> -</DIR> -<H2><A NAME="cindex_k">k</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX6">Keywords section</A> -</DIR> -<H2><A NAME="cindex_m">m</A></H2> -<DIR> -<LI><A HREF="gperf_4.html#IDX3">Minimal perfect hash functions</A> -</DIR> -<H2><A NAME="cindex_n">n</A></H2> -<DIR> -<LI><A HREF="gperf_5.html#IDX38">NUL</A> -</DIR> -<H2><A NAME="cindex_s">s</A></H2> -<DIR> -<LI><A HREF="gperf_6.html#IDX41">Slot name</A> -<LI><A HREF="gperf_4.html#IDX2">Static search structure</A> -<LI><A HREF="gperf_5.html#IDX37"><CODE>switch</CODE></A>, <A HREF="gperf_6.html#IDX46"><CODE>switch</CODE></A> -</DIR> - -</P> - -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_9.html">previous</A>, next, last section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_2.html b/doc/gperf_2.html deleted file mode 100644 index 1a57404..0000000 --- a/doc/gperf_2.html +++ /dev/null @@ -1,49 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - Contributors to GNU gperf Utility</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_1.html">previous</A>, <A HREF="gperf_3.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC2" HREF="gperf_toc.html#TOC2">Contributors to GNU <CODE>gperf</CODE> Utility</A></H1> - - -<UL> -<LI> - -<A NAME="IDX1"></A> -The GNU <CODE>gperf</CODE> perfect hash function generator utility was -written in GNU C++ by Douglas C. Schmidt. The general -idea for the perfect hash function generator was inspired by Keith -Bostic's algorithm written in C, and distributed to net.sources around -1984. The current program is a heavily modified, enhanced, and extended -implementation of Keith's basic idea, created at the University of -California, Irvine. Bugs, patches, and suggestions should be reported -to <CODE><bug-gnu-gperf@gnu.org></CODE>. - -<LI> - -Special thanks is extended to Michael Tiemann and Doug Lea, for -providing a useful compiler, and for giving me a forum to exhibit my -creation. - -In addition, Adam de Boor and Nels Olson provided many tips and insights -that greatly helped improve the quality and functionality of <CODE>gperf</CODE>. - -<LI> - -Bruno Haible enhanced and optimized the search algorithm. He also rewrote -the input routines and the output routines for better reliability, and -added a testsuite. -</UL> - -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_1.html">previous</A>, <A HREF="gperf_3.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_3.html b/doc/gperf_3.html deleted file mode 100644 index c587a69..0000000 --- a/doc/gperf_3.html +++ /dev/null @@ -1,42 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 2 Introduction</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_2.html">previous</A>, <A HREF="gperf_4.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC3" HREF="gperf_toc.html#TOC3">2 Introduction</A></H1> - -<P> -<CODE>gperf</CODE> is a perfect hash function generator written in C++. It -transforms an <VAR>n</VAR> element user-specified keyword set <VAR>W</VAR> into a -perfect hash function <VAR>F</VAR>. <VAR>F</VAR> uniquely maps keywords in -<VAR>W</VAR> onto the range 0..<VAR>k</VAR>, where <VAR>k</VAR> >= <VAR>n-1</VAR>. If <VAR>k</VAR> -= <VAR>n-1</VAR> then <VAR>F</VAR> is a <EM>minimal</EM> perfect hash function. -<CODE>gperf</CODE> generates a 0..<VAR>k</VAR> element static lookup table and a -pair of C functions. These functions determine whether a given -character string <VAR>s</VAR> occurs in <VAR>W</VAR>, using at most one probe into -the lookup table. - -</P> -<P> -<CODE>gperf</CODE> currently generates the reserved keyword recognizer for -lexical analyzers in several production and research compilers and -language processing tools, including GNU C, GNU C++, GNU Java, GNU Pascal, -GNU Modula 3, and GNU indent. Complete C++ source code for <CODE>gperf</CODE> is -available from <CODE>http://ftp.gnu.org/pub/gnu/gperf/</CODE>. -A paper describing <CODE>gperf</CODE>'s design and implementation in greater -detail is available in the Second USENIX C++ Conference proceedings -or from <CODE>http://www.cs.wustl.edu/~schmidt/resume.html</CODE>. - -</P> -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_2.html">previous</A>, <A HREF="gperf_4.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_4.html b/doc/gperf_4.html deleted file mode 100644 index 8aab740..0000000 --- a/doc/gperf_4.html +++ /dev/null @@ -1,99 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 3 Static search structures and GNU gperf</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_3.html">previous</A>, <A HREF="gperf_5.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC4" HREF="gperf_toc.html#TOC4">3 Static search structures and GNU <CODE>gperf</CODE></A></H1> -<P> -<A NAME="IDX2"></A> - -</P> -<P> -A <EM>static search structure</EM> is an Abstract Data Type with certain -fundamental operations, e.g., <EM>initialize</EM>, <EM>insert</EM>, -and <EM>retrieve</EM>. Conceptually, all insertions occur before any -retrievals. In practice, <CODE>gperf</CODE> generates a <EM>static</EM> array -containing search set keywords and any associated attributes specified -by the user. Thus, there is essentially no execution-time cost for the -insertions. It is a useful data structure for representing <EM>static -search sets</EM>. Static search sets occur frequently in software system -applications. Typical static search sets include compiler reserved -words, assembler instruction opcodes, and built-in shell interpreter -commands. Search set members, called <EM>keywords</EM>, are inserted into -the structure only once, usually during program initialization, and are -not generally modified at run-time. - -</P> -<P> -Numerous static search structure implementations exist, e.g., -arrays, linked lists, binary search trees, digital search tries, and -hash tables. Different approaches offer trade-offs between space -utilization and search time efficiency. For example, an <VAR>n</VAR> element -sorted array is space efficient, though the average-case time -complexity for retrieval operations using binary search is -proportional to log <VAR>n</VAR>. Conversely, hash table implementations -often locate a table entry in constant time, but typically impose -additional memory overhead and exhibit poor worst case performance. - -</P> -<P> -<A NAME="IDX3"></A> -<EM>Minimal perfect hash functions</EM> provide an optimal solution for a -particular class of static search sets. A minimal perfect hash -function is defined by two properties: - -</P> - -<UL> -<LI> - -It allows keyword recognition in a static search set using at most -<EM>one</EM> probe into the hash table. This represents the “perfect” -property. -<LI> - -The actual memory allocated to store the keywords is precisely large -enough for the keyword set, and <EM>no larger</EM>. This is the -“minimal” property. -</UL> - -<P> -For most applications it is far easier to generate <EM>perfect</EM> hash -functions than <EM>minimal perfect</EM> hash functions. Moreover, -non-minimal perfect hash functions frequently execute faster than -minimal ones in practice. This phenomena occurs since searching a -sparse keyword table increases the probability of locating a “null” -entry, thereby reducing string comparisons. <CODE>gperf</CODE>'s default -behavior generates <EM>near-minimal</EM> perfect hash functions for -keyword sets. However, <CODE>gperf</CODE> provides many options that permit -user control over the degree of minimality and perfection. - -</P> -<P> -Static search sets often exhibit relative stability over time. For -example, Ada's 63 reserved words have remained constant for nearly a -decade. It is therefore frequently worthwhile to expend concerted -effort building an optimal search structure <EM>once</EM>, if it -subsequently receives heavy use multiple times. <CODE>gperf</CODE> removes -the drudgery associated with constructing time- and space-efficient -search structures by hand. It has proven a useful and practical tool -for serious programming projects. Output from <CODE>gperf</CODE> is currently -used in several production and research compilers, including GNU C, GNU -C++, GNU Java, GNU Pascal, and GNU Modula 3. The latter two compilers are -not yet part of the official GNU distribution. Each compiler utilizes -<CODE>gperf</CODE> to automatically generate static search structures that -efficiently identify their respective reserved keywords. - -</P> -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_3.html">previous</A>, <A HREF="gperf_5.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_5.html b/doc/gperf_5.html deleted file mode 100644 index 3f97b93..0000000 --- a/doc/gperf_5.html +++ /dev/null @@ -1,720 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 4 High-Level Description of GNU gperf</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_4.html">previous</A>, <A HREF="gperf_6.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC5" HREF="gperf_toc.html#TOC5">4 High-Level Description of GNU <CODE>gperf</CODE></A></H1> - -<P> -The perfect hash function generator <CODE>gperf</CODE> reads a set of -“keywords” from an input file (or from the standard input by -default). It attempts to derive a perfect hashing function that -recognizes a member of the <EM>static keyword set</EM> with at most a -single probe into the lookup table. If <CODE>gperf</CODE> succeeds in -generating such a function it produces a pair of C source code routines -that perform hashing and table lookup recognition. All generated C code -is directed to the standard output. Command-line options described -below allow you to modify the input and output format to <CODE>gperf</CODE>. - -</P> -<P> -By default, <CODE>gperf</CODE> attempts to produce time-efficient code, with -less emphasis on efficient space utilization. However, several options -exist that permit trading-off execution time for storage space and vice -versa. In particular, expanding the generated table size produces a -sparse search structure, generally yielding faster searches. -Conversely, you can direct <CODE>gperf</CODE> to utilize a C <CODE>switch</CODE> -statement scheme that minimizes data space storage size. Furthermore, -using a C <CODE>switch</CODE> may actually speed up the keyword retrieval time -somewhat. Actual results depend on your C compiler, of course. - -</P> -<P> -In general, <CODE>gperf</CODE> assigns values to the bytes it is using -for hashing until some set of values gives each keyword a unique value. -A helpful heuristic is that the larger the hash value range, the easier -it is for <CODE>gperf</CODE> to find and generate a perfect hash function. -Experimentation is the key to getting the most from <CODE>gperf</CODE>. - -</P> - - -<H2><A NAME="SEC6" HREF="gperf_toc.html#TOC6">4.1 Input Format to <CODE>gperf</CODE></A></H2> -<P> -<A NAME="IDX4"></A> -<A NAME="IDX5"></A> -<A NAME="IDX6"></A> -<A NAME="IDX7"></A> -You can control the input file format by varying certain command-line -arguments, in particular the <SAMP>‘-t’</SAMP> option. The input's appearance -is similar to GNU utilities <CODE>flex</CODE> and <CODE>bison</CODE> (or UNIX -utilities <CODE>lex</CODE> and <CODE>yacc</CODE>). Here's an outline of the general -format: - -</P> - -<PRE> -declarations -%% -keywords -%% -functions -</PRE> - -<P> -<EM>Unlike</EM> <CODE>flex</CODE> or <CODE>bison</CODE>, the declarations section and -the functions section are optional. The following sections describe the -input format for each section. - -</P> - -<P> -It is possible to omit the declaration section entirely, if the <SAMP>‘-t’</SAMP> -option is not given. In this case the input file begins directly with the -first keyword line, e.g.: - -</P> - -<PRE> -january -february -march -april -... -</PRE> - - - -<H3><A NAME="SEC7" HREF="gperf_toc.html#TOC7">4.1.1 Declarations</A></H3> - -<P> -The keyword input file optionally contains a section for including -arbitrary C declarations and definitions, <CODE>gperf</CODE> declarations that -act like command-line options, as well as for providing a user-supplied -<CODE>struct</CODE>. - -</P> - - - -<H4><A NAME="SEC8" HREF="gperf_toc.html#TOC8">4.1.1.1 User-supplied <CODE>struct</CODE></A></H4> - -<P> -If the <SAMP>‘-t’</SAMP> option (or, equivalently, the <SAMP>‘%struct-type’</SAMP> declaration) -<EM>is</EM> enabled, you <EM>must</EM> provide a C <CODE>struct</CODE> as the last -component in the declaration section from the input file. The first -field in this struct must be of type <CODE>char *</CODE> or <CODE>const char *</CODE> -if the <SAMP>‘-P’</SAMP> option is not given, or of type <CODE>int</CODE> if the option -<SAMP>‘-P’</SAMP> (or, equivalently, the <SAMP>‘%pic’</SAMP> declaration) is enabled. -This first field must be called <SAMP>‘name’</SAMP>, although it is possible to modify -its name with the <SAMP>‘-K’</SAMP> option (or, equivalently, the -<SAMP>‘%define slot-name’</SAMP> declaration) described below. - -</P> -<P> -Here is a simple example, using months of the year and their attributes as -input: - -</P> - -<PRE> -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -april, 4, 30, 30 -may, 5, 31, 31 -june, 6, 30, 30 -july, 7, 31, 31 -august, 8, 31, 31 -september, 9, 30, 30 -october, 10, 31, 31 -november, 11, 30, 30 -december, 12, 31, 31 -</PRE> - -<P> -<A NAME="IDX8"></A> -Separating the <CODE>struct</CODE> declaration from the list of keywords and -other fields are a pair of consecutive percent signs, <SAMP>‘%%’</SAMP>, -appearing left justified in the first column, as in the UNIX utility -<CODE>lex</CODE>. - -</P> -<P> -If the <CODE>struct</CODE> has already been declared in an include file, it can -be mentioned in an abbreviated form, like this: - -</P> - -<PRE> -struct month; -%% -january, 1, 31, 31 -... -</PRE> - - - -<H4><A NAME="SEC9" HREF="gperf_toc.html#TOC9">4.1.1.2 Gperf Declarations</A></H4> - -<P> -The declaration section can contain <CODE>gperf</CODE> declarations. They -influence the way <CODE>gperf</CODE> works, like command line options do. -In fact, every such declaration is equivalent to a command line option. -There are three forms of declarations: - -</P> - -<OL> -<LI> - -Declarations without argument, like <SAMP>‘%compare-lengths’</SAMP>. - -<LI> - -Declarations with an argument, like <SAMP>‘%switch=<VAR>count</VAR>’</SAMP>. - -<LI> - -Declarations of names of entities in the output file, like -<SAMP>‘%define lookup-function-name <VAR>name</VAR>’</SAMP>. -</OL> - -<P> -When a declaration is given both in the input file and as a command line -option, the command-line option's value prevails. - -</P> -<P> -The following <CODE>gperf</CODE> declarations are available. - -</P> -<DL COMPACT> - -<DT><SAMP>‘%delimiters=<VAR>delimiter-list</VAR>’</SAMP> -<DD> -<A NAME="IDX9"></A> -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. - -<DT><SAMP>‘%struct-type’</SAMP> -<DD> -<A NAME="IDX10"></A> -Allows you to include a <CODE>struct</CODE> type declaration for generated -code; see above for an example. - -<DT><SAMP>‘%ignore-case’</SAMP> -<DD> -<A NAME="IDX11"></A> -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. - -<DT><SAMP>‘%language=<VAR>language-name</VAR>’</SAMP> -<DD> -<A NAME="IDX12"></A> -Instructs <CODE>gperf</CODE> to generate code in the language specified by the -option's argument. Languages handled are currently: - -<DL COMPACT> - -<DT><SAMP>‘KR-C’</SAMP> -<DD> -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking <SAMP>‘const’</SAMP>. - -<DT><SAMP>‘C’</SAMP> -<DD> -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you <CODE>#define const</CODE> to empty -for compilers which don't know about this keyword. - -<DT><SAMP>‘ANSI-C’</SAMP> -<DD> -ANSI C. This language is understood by ANSI C (C89, ISO C90) compilers, -ISO C99 compilers, and C++ compilers. - -<DT><SAMP>‘C++’</SAMP> -<DD> -C++. This language is understood by C++ compilers. -</DL> - -The default is ANSI-C. - -<DT><SAMP>‘%define slot-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX13"></A> -This declaration is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is <SAMP>‘name’</SAMP>. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied <CODE>struct</CODE>. - -<DT><SAMP>‘%define initializer-suffix <VAR>initializers</VAR>’</SAMP> -<DD> -<A NAME="IDX14"></A> -This declaration is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -It permits to specify initializers for the structure members following -<VAR>slot-name</VAR> in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following <VAR>slot-name</VAR>. - -<DT><SAMP>‘%define hash-function-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX15"></A> -Allows you to specify the name for the generated hash function. Default -name is <SAMP>‘hash’</SAMP>. This option permits the use of two hash tables in -the same file. - -<DT><SAMP>‘%define lookup-function-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX16"></A> -Allows you to specify the name for the generated lookup function. -Default name is <SAMP>‘in_word_set’</SAMP>. This option permits multiple -generated hash functions to be used in the same application. - -<DT><SAMP>‘%define class-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX17"></A> -This option is only useful when option <SAMP>‘-L C++’</SAMP> (or, equivalently, -the <SAMP>‘%language=C++’</SAMP> declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -<CODE>Perfect_Hash</CODE>. - -<DT><SAMP>‘%7bit’</SAMP> -<DD> -<A NAME="IDX18"></A> -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions <CODE>isalnum</CODE> and <CODE>isgraph</CODE> do -<EM>not</EM> guarantee that a byte is in this range. Only an explicit -test like <SAMP>‘c >= 'A' && c <= 'Z'’</SAMP> guarantees this.) - -<DT><SAMP>‘%compare-lengths’</SAMP> -<DD> -<A NAME="IDX19"></A> -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section <A HREF="gperf_5.html#SEC15">4.3 Use of NUL bytes</A>). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via <CODE>strcmp</CODE>. -However, using <SAMP>‘%compare-lengths’</SAMP> might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option <SAMP>‘-S’</SAMP> or <SAMP>‘%switch’</SAMP> is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -<DT><SAMP>‘%compare-strncmp’</SAMP> -<DD> -<A NAME="IDX20"></A> -Generates C code that uses the <CODE>strncmp</CODE> function to perform -string comparisons. The default action is to use <CODE>strcmp</CODE>. - -<DT><SAMP>‘%readonly-tables’</SAMP> -<DD> -<A NAME="IDX21"></A> -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -<DT><SAMP>‘%enum’</SAMP> -<DD> -<A NAME="IDX22"></A> -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <CODE><jjc@ai.mit.edu></CODE>. - -<DT><SAMP>‘%includes’</SAMP> -<DD> -<A NAME="IDX23"></A> -Include the necessary system include file, <CODE><string.h></CODE>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -<DT><SAMP>‘%global-table’</SAMP> -<DD> -<A NAME="IDX24"></A> -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -<DT><SAMP>‘%pic’</SAMP> -<DD> -<A NAME="IDX25"></A> -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the <SAMP>‘%struct-type’</SAMP> declaration (or, -equivalently, the option <SAMP>‘-t’</SAMP>) is also given, the first field of the -user-defined struct must be of type <SAMP>‘int’</SAMP>, not <SAMP>‘char *’</SAMP>, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -<SAMP>‘stringpool + <VAR>o</VAR>’</SAMP>, where <VAR>o</VAR> is the offset. The string pool -name can be changed through the <SAMP>‘%define string-pool-name’</SAMP> declaration. - -<DT><SAMP>‘%define string-pool-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX26"></A> -Allows you to specify the name of the generated string pool created by -the declaration <SAMP>‘%pic’</SAMP> (or, equivalently, the option <SAMP>‘-P’</SAMP>). -The default name is <SAMP>‘stringpool’</SAMP>. This declaration permits the use of -two hash tables in the same file, with <SAMP>‘%pic’</SAMP> and even when the -<SAMP>‘%global-table’</SAMP> declaration (or, equivalently, the option <SAMP>‘-G’</SAMP>) -is given. - -<DT><SAMP>‘%null-strings’</SAMP> -<DD> -<A NAME="IDX27"></A> -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as the declaration <SAMP>‘%pic’</SAMP>), at the -expense of one more test-and-branch instruction at run time. - -<DT><SAMP>‘%define word-array-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX28"></A> -Allows you to specify the name for the generated array containing the -hash table. Default name is <SAMP>‘wordlist’</SAMP>. This option permits the -use of two hash tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘%define length-table-name <VAR>name</VAR>’</SAMP> -<DD> -<A NAME="IDX29"></A> -Allows you to specify the name for the generated array containing the -length table. Default name is <SAMP>‘lengthtable’</SAMP>. This option permits the -use of two length tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘%switch=<VAR>count</VAR>’</SAMP> -<DD> -<A NAME="IDX30"></A> -Causes the generated C code to use a <CODE>switch</CODE> statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many <CODE>switch</CODE> statements are generated. A -value of 1 generates 1 <CODE>switch</CODE> containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -<CODE>switch</CODE>, etc. This is useful since many C compilers cannot -correctly generate code for large <CODE>switch</CODE> statements. This option -was inspired in part by Keith Bostic's original C program. - -<DT><SAMP>‘%omit-struct-type’</SAMP> -<DD> -<A NAME="IDX31"></A> -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. -</DL> - - - -<H4><A NAME="SEC10" HREF="gperf_toc.html#TOC10">4.1.1.3 C Code Inclusion</A></H4> - -<P> -<A NAME="IDX32"></A> -<A NAME="IDX33"></A> -Using a syntax similar to GNU utilities <CODE>flex</CODE> and <CODE>bison</CODE>, it -is possible to directly include C source text and comments verbatim into -the generated output file. This is accomplished by enclosing the region -inside left-justified surrounding <SAMP>‘%{’</SAMP>, <SAMP>‘%}’</SAMP> pairs. Here is -an input fragment based on the previous example that illustrates this -feature: - -</P> - -<PRE> -%{ -#include <assert.h> -/* This section of code is inserted directly into the output. */ -int return_month_days (struct month *months, int is_leap_year); -%} -struct month { char *name; int number; int days; int leap_days; }; -%% -january, 1, 31, 31 -february, 2, 28, 29 -march, 3, 31, 31 -... -</PRE> - - - -<H3><A NAME="SEC11" HREF="gperf_toc.html#TOC11">4.1.2 Format for Keyword Entries</A></H3> - -<P> -The second input file format section contains lines of keywords and any -associated attributes you might supply. A line beginning with <SAMP>‘#’</SAMP> -in the first column is considered a comment. Everything following the -<SAMP>‘#’</SAMP> is ignored, up to and including the following newline. A line -beginning with <SAMP>‘%’</SAMP> in the first column is an option declaration and -must not occur within the keywords section. - -</P> -<P> -The first field of each non-comment line is always the keyword itself. It -can be given in two ways: as a simple name, i.e., without surrounding -string quotation marks, or as a string enclosed in double-quotes, in -C syntax, possibly with backslash escapes like <CODE>\"</CODE> or <CODE>\234</CODE> -or <CODE>\xa8</CODE>. In either case, it must start right at the beginning -of the line, without leading whitespace. -In this context, a “field” is considered to extend up to, but -not include, the first blank, comma, or newline. Here is a simple -example taken from a partial list of C reserved words: - -</P> - -<PRE> -# These are a few C reserved words, see the c.gperf file -# for a complete list of ANSI C reserved words. -unsigned -sizeof -switch -signed -if -default -for -while -return -</PRE> - -<P> -Note that unlike <CODE>flex</CODE> or <CODE>bison</CODE> the first <SAMP>‘%%’</SAMP> marker -may be elided if the declaration section is empty. - -</P> -<P> -Additional fields may optionally follow the leading keyword. Fields -should be separated by commas, and terminate at the end of line. What -these fields mean is entirely up to you; they are used to initialize the -elements of the user-defined <CODE>struct</CODE> provided by you in the -declaration section. If the <SAMP>‘-t’</SAMP> option (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) is <EM>not</EM> enabled -these fields are simply ignored. All previous examples except the last -one contain keyword attributes. - -</P> - - -<H3><A NAME="SEC12" HREF="gperf_toc.html#TOC12">4.1.3 Including Additional C Functions</A></H3> - -<P> -The optional third section also corresponds closely with conventions -found in <CODE>flex</CODE> and <CODE>bison</CODE>. All text in this section, -starting at the final <SAMP>‘%%’</SAMP> and extending to the end of the input -file, is included verbatim into the generated output file. Naturally, -it is your responsibility to ensure that the code contained in this -section is valid C. - -</P> - - -<H3><A NAME="SEC13" HREF="gperf_toc.html#TOC13">4.1.4 Where to place directives for GNU <CODE>indent</CODE>.</A></H3> - -<P> -If you want to invoke GNU <CODE>indent</CODE> on a <CODE>gperf</CODE> input file, -you will see that GNU <CODE>indent</CODE> doesn't understand the <SAMP>‘%%’</SAMP>, -<SAMP>‘%{’</SAMP> and <SAMP>‘%}’</SAMP> directives that control <CODE>gperf</CODE>'s -interpretation of the input file. Therefore you have to insert some -directives for GNU <CODE>indent</CODE>. More precisely, assuming the most -general input file structure - -</P> - -<PRE> -declarations part 1 -%{ -verbatim code -%} -declarations part 2 -%% -keywords -%% -functions -</PRE> - -<P> -you would insert <SAMP>‘*INDENT-OFF*’</SAMP> and <SAMP>‘*INDENT-ON*’</SAMP> comments -as follows: - -</P> - -<PRE> -/* *INDENT-OFF* */ -declarations part 1 -%{ -/* *INDENT-ON* */ -verbatim code -/* *INDENT-OFF* */ -%} -declarations part 2 -%% -keywords -%% -/* *INDENT-ON* */ -functions -</PRE> - - - -<H2><A NAME="SEC14" HREF="gperf_toc.html#TOC14">4.2 Output Format for Generated C Code with <CODE>gperf</CODE></A></H2> -<P> -<A NAME="IDX34"></A> - -</P> -<P> -Several options control how the generated C code appears on the standard -output. Two C functions are generated. They are called <CODE>hash</CODE> and -<CODE>in_word_set</CODE>, although you may modify their names with a command-line -option. Both functions require two arguments, a string, <CODE>char *</CODE> -<VAR>str</VAR>, and a length parameter, <CODE>int</CODE> <VAR>len</VAR>. Their default -function prototypes are as follows: - -</P> -<P> -<DL> -<DT><U>Function:</U> unsigned int <B>hash</B> <I>(const char * <VAR>str</VAR>, unsigned int <VAR>len</VAR>)</I> -<DD><A NAME="IDX35"></A> -By default, the generated <CODE>hash</CODE> function returns an integer value -created by adding <VAR>len</VAR> to several user-specified <VAR>str</VAR> byte -positions indexed into an <EM>associated values</EM> table stored in a -local static array. The associated values table is constructed -internally by <CODE>gperf</CODE> and later output as a static local C array -called <SAMP>‘hash_table’</SAMP>. The relevant selected positions (i.e. indices -into <VAR>str</VAR>) are specified via the <SAMP>‘-k’</SAMP> option when running -<CODE>gperf</CODE>, as detailed in the <EM>Options</EM> section below (see section <A HREF="gperf_6.html#SEC17">5 Invoking <CODE>gperf</CODE></A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> <B>in_word_set</B> <I>(const char * <VAR>str</VAR>, unsigned int <VAR>len</VAR>)</I> -<DD><A NAME="IDX36"></A> -If <VAR>str</VAR> is in the keyword set, returns a pointer to that -keyword. More exactly, if the option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) was given, it returns -a pointer to the matching keyword's structure. Otherwise it returns -<CODE>NULL</CODE>. -</DL> - -</P> -<P> -If the option <SAMP>‘-c’</SAMP> (or, equivalently, the <SAMP>‘%compare-strncmp’</SAMP> -declaration) is not used, <VAR>str</VAR> must be a NUL terminated -string of exactly length <VAR>len</VAR>. If <SAMP>‘-c’</SAMP> (or, equivalently, the -<SAMP>‘%compare-strncmp’</SAMP> declaration) is used, <VAR>str</VAR> must -simply be an array of <VAR>len</VAR> bytes and does not need to be NUL -terminated. - -</P> -<P> -The code generated for these two functions is affected by the following -options: - -</P> -<DL COMPACT> - -<DT><SAMP>‘-t’</SAMP> -<DD> -<DT><SAMP>‘--struct-type’</SAMP> -<DD> -Make use of the user-defined <CODE>struct</CODE>. - -<DT><SAMP>‘-S <VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--switch=<VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<A NAME="IDX37"></A> -Generate 1 or more C <CODE>switch</CODE> statement rather than use a large, -(and potentially sparse) static array. Although the exact time and -space savings of this approach vary according to your C compiler's -degree of optimization, this method often results in smaller and faster -code. -</DL> - -<P> -If the <SAMP>‘-t’</SAMP> and <SAMP>‘-S’</SAMP> options (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> and <SAMP>‘%switch’</SAMP> declarations) are omitted, the default -action -is to generate a <CODE>char *</CODE> array containing the keywords, together with -additional empty strings used for padding the array. By experimenting -with the various input and output options, and timing the resulting C -code, you can determine the best option choices for different keyword -set characteristics. - -</P> - - -<H2><A NAME="SEC15" HREF="gperf_toc.html#TOC15">4.3 Use of NUL bytes</A></H2> -<P> -<A NAME="IDX38"></A> - -</P> -<P> -By default, the code generated by <CODE>gperf</CODE> operates on zero -terminated strings, the usual representation of strings in C. This means -that the keywords in the input file must not contain NUL bytes, -and the <VAR>str</VAR> argument passed to <CODE>hash</CODE> or <CODE>in_word_set</CODE> -must be NUL terminated and have exactly length <VAR>len</VAR>. - -</P> -<P> -If option <SAMP>‘-c’</SAMP> (or, equivalently, the <SAMP>‘%compare-strncmp’</SAMP> -declaration) is used, then the <VAR>str</VAR> argument does not need -to be NUL terminated. The code generated by <CODE>gperf</CODE> will only -access the first <VAR>len</VAR>, not <VAR>len+1</VAR>, bytes starting at <VAR>str</VAR>. -However, the keywords in the input file still must not contain NUL -bytes. - -</P> -<P> -If option <SAMP>‘-l’</SAMP> (or, equivalently, the <SAMP>‘%compare-lengths’</SAMP> -declaration) is used, then the hash table performs binary -comparison. The keywords in the input file may contain NUL bytes, -written in string syntax as <CODE>\000</CODE> or <CODE>\x00</CODE>, and the code -generated by <CODE>gperf</CODE> will treat NUL like any other byte. -Also, in this case the <SAMP>‘-c’</SAMP> option (or, equivalently, the -<SAMP>‘%compare-strncmp’</SAMP> declaration) is ignored. - -</P> - - -<H2><A NAME="SEC16" HREF="gperf_toc.html#TOC16">4.4 The Copyright of the Output</A></H2> -<P> -<A NAME="IDX39"></A> - -</P> -<P> -<CODE>gperf</CODE> is under GPL, but that does not cause the output produced -by <CODE>gperf</CODE> to be under GPL. The reason is that the output contains -only small pieces of text that come directly from <CODE>gperf</CODE>'s source -code -- only about 7 lines long, too small for being significant --, and -therefore the output is not a “work based on <CODE>gperf</CODE>” (in the -sense of the GPL version 3). - -</P> -<P> -On the other hand, the output produced by <CODE>gperf</CODE> contains -essentially all of the input file. Therefore the output is a -“derivative work” of the input (in the sense of U.S. copyright law); -and its copyright status depends on the copyright of the input. For most -software licenses, the result is that the the output is under the same -license, with the same copyright holder, as the input that was passed to -<CODE>gperf</CODE>. - -</P> -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_4.html">previous</A>, <A HREF="gperf_6.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_6.html b/doc/gperf_6.html deleted file mode 100644 index 92743c6..0000000 --- a/doc/gperf_6.html +++ /dev/null @@ -1,502 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 5 Invoking gperf</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_5.html">previous</A>, <A HREF="gperf_7.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC17" HREF="gperf_toc.html#TOC17">5 Invoking <CODE>gperf</CODE></A></H1> - -<P> -There are <EM>many</EM> options to <CODE>gperf</CODE>. They were added to make -the program more convenient for use with real applications. “On-line” -help is readily available via the <SAMP>‘--help’</SAMP> option. Here is the -complete list of options. - -</P> - - - -<H2><A NAME="SEC18" HREF="gperf_toc.html#TOC18">5.1 Specifying the Location of the Output File</A></H2> - -<DL COMPACT> - -<DT><SAMP>‘--output-file=<VAR>file</VAR>’</SAMP> -<DD> -Allows you to specify the name of the file to which the output is written to. -</DL> - -<P> -The results are written to standard output if no output file is specified -or if it is <SAMP>‘-’</SAMP>. - -</P> - - -<H2><A NAME="SEC19" HREF="gperf_toc.html#TOC19">5.2 Options that affect Interpretation of the Input File</A></H2> - -<P> -These options are also available as declarations in the input file -(see section <A HREF="gperf_5.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-e <VAR>keyword-delimiter-list</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--delimiters=<VAR>keyword-delimiter-list</VAR>’</SAMP> -<DD> -<A NAME="IDX40"></A> -Allows you to provide a string containing delimiters used to -separate keywords from their attributes. The default is ",". This -option is essential if you want to use keywords that have embedded -commas or newlines. One useful trick is to use -e'TAB', where TAB is -the literal tab character. - -<DT><SAMP>‘-t’</SAMP> -<DD> -<DT><SAMP>‘--struct-type’</SAMP> -<DD> -Allows you to include a <CODE>struct</CODE> type declaration for generated -code. Any text before a pair of consecutive <SAMP>‘%%’</SAMP> is considered -part of the type declaration. Keywords and additional fields may follow -this, one group of fields per line. A set of examples for generating -perfect hash tables and functions for Ada, C, C++, Pascal, Modula 2, -Modula 3 and JavaScript reserved words are distributed with this release. - -<DT><SAMP>‘--ignore-case’</SAMP> -<DD> -Consider upper and lower case ASCII characters as equivalent. The string -comparison will use a case insignificant character comparison. Note that -locale dependent case mappings are ignored. This option is therefore not -suitable if a properly internationalized or locale aware case mapping -should be used. (For example, in a Turkish locale, the upper case equivalent -of the lowercase ASCII letter <SAMP>‘i’</SAMP> is the non-ASCII character -<SAMP>‘capital i with dot above’</SAMP>.) For this case, it is better to apply -an uppercase or lowercase conversion on the string before passing it to -the <CODE>gperf</CODE> generated function. -</DL> - - - -<H2><A NAME="SEC20" HREF="gperf_toc.html#TOC20">5.3 Options to specify the Language for the Output Code</A></H2> - -<P> -These options are also available as declarations in the input file -(see section <A HREF="gperf_5.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-L <VAR>generated-language-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--language=<VAR>generated-language-name</VAR>’</SAMP> -<DD> -Instructs <CODE>gperf</CODE> to generate code in the language specified by the -option's argument. Languages handled are currently: - -<DL COMPACT> - -<DT><SAMP>‘KR-C’</SAMP> -<DD> -Old-style K&R C. This language is understood by old-style C compilers and -ANSI C compilers, but ANSI C compilers may flag warnings (or even errors) -because of lacking <SAMP>‘const’</SAMP>. - -<DT><SAMP>‘C’</SAMP> -<DD> -Common C. This language is understood by ANSI C compilers, and also by -old-style C compilers, provided that you <CODE>#define const</CODE> to empty -for compilers which don't know about this keyword. - -<DT><SAMP>‘ANSI-C’</SAMP> -<DD> -ANSI C. This language is understood by ANSI C compilers and C++ compilers. - -<DT><SAMP>‘C++’</SAMP> -<DD> -C++. This language is understood by C++ compilers. -</DL> - -The default is ANSI-C. - -<DT><SAMP>‘-a’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. - -<DT><SAMP>‘-g’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. -</DL> - - - -<H2><A NAME="SEC21" HREF="gperf_toc.html#TOC21">5.4 Options for fine tuning Details in the Output Code</A></H2> - -<P> -Most of these options are also available as declarations in the input file -(see section <A HREF="gperf_5.html#SEC9">4.1.1.2 Gperf Declarations</A>). - -</P> -<DL COMPACT> - -<DT><SAMP>‘-K <VAR>slot-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--slot-name=<VAR>slot-name</VAR>’</SAMP> -<DD> -<A NAME="IDX41"></A> -This option is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -By default, the program assumes the structure component identifier for -the keyword is <SAMP>‘name’</SAMP>. This option allows an arbitrary choice of -identifier for this component, although it still must occur as the first -field in your supplied <CODE>struct</CODE>. - -<DT><SAMP>‘-F <VAR>initializers</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--initializer-suffix=<VAR>initializers</VAR>’</SAMP> -<DD> -<A NAME="IDX42"></A> -This option is only useful when option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) has been given. -It permits to specify initializers for the structure members following -<VAR>slot-name</VAR> in empty hash table entries. The list of initializers -should start with a comma. By default, the emitted code will -zero-initialize structure members following <VAR>slot-name</VAR>. - -<DT><SAMP>‘-H <VAR>hash-function-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--hash-function-name=<VAR>hash-function-name</VAR>’</SAMP> -<DD> -Allows you to specify the name for the generated hash function. Default -name is <SAMP>‘hash’</SAMP>. This option permits the use of two hash tables in -the same file. - -<DT><SAMP>‘-N <VAR>lookup-function-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--lookup-function-name=<VAR>lookup-function-name</VAR>’</SAMP> -<DD> -Allows you to specify the name for the generated lookup function. -Default name is <SAMP>‘in_word_set’</SAMP>. This option permits multiple -generated hash functions to be used in the same application. - -<DT><SAMP>‘-Z <VAR>class-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--class-name=<VAR>class-name</VAR>’</SAMP> -<DD> -<A NAME="IDX43"></A> -This option is only useful when option <SAMP>‘-L C++’</SAMP> (or, equivalently, -the <SAMP>‘%language=C++’</SAMP> declaration) has been given. It -allows you to specify the name of generated C++ class. Default name is -<CODE>Perfect_Hash</CODE>. - -<DT><SAMP>‘-7’</SAMP> -<DD> -<DT><SAMP>‘--seven-bit’</SAMP> -<DD> -This option specifies that all strings that will be passed as arguments -to the generated hash function and the generated lookup function will -solely consist of 7-bit ASCII characters (bytes in the range 0..127). -(Note that the ANSI C functions <CODE>isalnum</CODE> and <CODE>isgraph</CODE> do -<EM>not</EM> guarantee that a byte is in this range. Only an explicit -test like <SAMP>‘c >= 'A' && c <= 'Z'’</SAMP> guarantees this.) This was the -default in versions of <CODE>gperf</CODE> earlier than 2.7; now the default is -to support 8-bit and multibyte characters. - -<DT><SAMP>‘-l’</SAMP> -<DD> -<DT><SAMP>‘--compare-lengths’</SAMP> -<DD> -Compare keyword lengths before trying a string comparison. This option -is mandatory for binary comparisons (see section <A HREF="gperf_5.html#SEC15">4.3 Use of NUL bytes</A>). It also might -cut down on the number of string comparisons made during the lookup, since -keywords with different lengths are never compared via <CODE>strcmp</CODE>. -However, using <SAMP>‘-l’</SAMP> might greatly increase the size of the -generated C code if the lookup table range is large (which implies that -the switch option <SAMP>‘-S’</SAMP> or <SAMP>‘%switch’</SAMP> is not enabled), since the length -table contains as many elements as there are entries in the lookup table. - -<DT><SAMP>‘-c’</SAMP> -<DD> -<DT><SAMP>‘--compare-strncmp’</SAMP> -<DD> -Generates C code that uses the <CODE>strncmp</CODE> function to perform -string comparisons. The default action is to use <CODE>strcmp</CODE>. - -<DT><SAMP>‘-C’</SAMP> -<DD> -<DT><SAMP>‘--readonly-tables’</SAMP> -<DD> -Makes the contents of all generated lookup tables constant, i.e., -“readonly”. Many compilers can generate more efficient code for this -by putting the tables in readonly memory. - -<DT><SAMP>‘-E’</SAMP> -<DD> -<DT><SAMP>‘--enum’</SAMP> -<DD> -Define constant values using an enum local to the lookup function rather -than with #defines. This also means that different lookup functions can -reside in the same file. Thanks to James Clark <CODE><jjc@ai.mit.edu></CODE>. - -<DT><SAMP>‘-I’</SAMP> -<DD> -<DT><SAMP>‘--includes’</SAMP> -<DD> -Include the necessary system include file, <CODE><string.h></CODE>, at the -beginning of the code. By default, this is not done; the user must -include this header file himself to allow compilation of the code. - -<DT><SAMP>‘-G’</SAMP> -<DD> -<DT><SAMP>‘--global-table’</SAMP> -<DD> -Generate the static table of keywords as a static global variable, -rather than hiding it inside of the lookup function (which is the -default behavior). - -<DT><SAMP>‘-P’</SAMP> -<DD> -<DT><SAMP>‘--pic’</SAMP> -<DD> -Optimize the generated table for inclusion in shared libraries. This -reduces the startup time of programs using a shared library containing -the generated code. If the option <SAMP>‘-t’</SAMP> (or, equivalently, the -<SAMP>‘%struct-type’</SAMP> declaration) is also given, the first field of the -user-defined struct must be of type <SAMP>‘int’</SAMP>, not <SAMP>‘char *’</SAMP>, because -it will contain offsets into the string pool instead of actual strings. -To convert such an offset to a string, you can use the expression -<SAMP>‘stringpool + <VAR>o</VAR>’</SAMP>, where <VAR>o</VAR> is the offset. The string pool -name can be changed through the option <SAMP>‘--string-pool-name’</SAMP>. - -<DT><SAMP>‘-Q <VAR>string-pool-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--string-pool-name=<VAR>string-pool-name</VAR>’</SAMP> -<DD> -Allows you to specify the name of the generated string pool created by -option <SAMP>‘-P’</SAMP>. The default name is <SAMP>‘stringpool’</SAMP>. This option -permits the use of two hash tables in the same file, with <SAMP>‘-P’</SAMP> and -even when the option <SAMP>‘-G’</SAMP> (or, equivalently, the <SAMP>‘%global-table’</SAMP> -declaration) is given. - -<DT><SAMP>‘--null-strings’</SAMP> -<DD> -Use NULL strings instead of empty strings for empty keyword table entries. -This reduces the startup time of programs using a shared library containing -the generated code (but not as much as option <SAMP>‘-P’</SAMP>), at the expense -of one more test-and-branch instruction at run time. - -<DT><SAMP>‘-W <VAR>hash-table-array-name</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--word-array-name=<VAR>hash-table-array-name</VAR>’</SAMP> -<DD> -<A NAME="IDX44"></A> -Allows you to specify the name for the generated array containing the -hash table. Default name is <SAMP>‘wordlist’</SAMP>. This option permits the -use of two hash tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘--length-table-name=<VAR>length-table-array-name</VAR>’</SAMP> -<DD> -<A NAME="IDX45"></A> -Allows you to specify the name for the generated array containing the -length table. Default name is <SAMP>‘lengthtable’</SAMP>. This option permits the -use of two length tables in the same file, even when the option <SAMP>‘-G’</SAMP> -(or, equivalently, the <SAMP>‘%global-table’</SAMP> declaration) is given. - -<DT><SAMP>‘-S <VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--switch=<VAR>total-switch-statements</VAR>’</SAMP> -<DD> -<A NAME="IDX46"></A> -Causes the generated C code to use a <CODE>switch</CODE> statement scheme, -rather than an array lookup table. This can lead to a reduction in both -time and space requirements for some input files. The argument to this -option determines how many <CODE>switch</CODE> statements are generated. A -value of 1 generates 1 <CODE>switch</CODE> containing all the elements, a -value of 2 generates 2 tables with 1/2 the elements in each -<CODE>switch</CODE>, etc. This is useful since many C compilers cannot -correctly generate code for large <CODE>switch</CODE> statements. This option -was inspired in part by Keith Bostic's original C program. - -<DT><SAMP>‘-T’</SAMP> -<DD> -<DT><SAMP>‘--omit-struct-type’</SAMP> -<DD> -Prevents the transfer of the type declaration to the output file. Use -this option if the type is already defined elsewhere. - -<DT><SAMP>‘-p’</SAMP> -<DD> -This option is supported for compatibility with previous releases of -<CODE>gperf</CODE>. It does not do anything. -</DL> - - - -<H2><A NAME="SEC22" HREF="gperf_toc.html#TOC22">5.5 Options for changing the Algorithms employed by <CODE>gperf</CODE></A></H2> - -<DL COMPACT> - -<DT><SAMP>‘-k <VAR>selected-byte-positions</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--key-positions=<VAR>selected-byte-positions</VAR>’</SAMP> -<DD> -Allows selection of the byte positions used in the keywords' -hash function. The allowable choices range between 1-255, inclusive. -The positions are separated by commas, e.g., <SAMP>‘-k 9,4,13,14’</SAMP>; -ranges may be used, e.g., <SAMP>‘-k 2-7’</SAMP>; and positions may occur -in any order. Furthermore, the wildcard '*' causes the generated -hash function to consider <STRONG>all</STRONG> byte positions in each keyword, -whereas '$' instructs the hash function to use the “final byte” -of a keyword (this is the only way to use a byte position greater than -255, incidentally). - -For instance, the option <SAMP>‘-k 1,2,4,6-10,'$'’</SAMP> generates a hash -function that considers positions 1,2,4,6,7,8,9,10, plus the last -byte in each keyword (which may be at a different position for each -keyword, obviously). Keywords -with length less than the indicated byte positions work properly, since -selected byte positions exceeding the keyword length are simply not -referenced in the hash function. - -This option is not normally needed since version 2.8 of <CODE>gperf</CODE>; -the default byte positions are computed depending on the keyword set, -through a search that minimizes the number of byte positions. - -<DT><SAMP>‘-D’</SAMP> -<DD> -<DT><SAMP>‘--duplicates’</SAMP> -<DD> -<A NAME="IDX47"></A> -Handle keywords whose selected byte sets hash to duplicate values. -Duplicate hash values can occur if a set of keywords has the same names, but -possesses different attributes, or if the selected byte positions are not well -chosen. With the -D option <CODE>gperf</CODE> treats all these keywords as -part of an equivalence class and generates a perfect hash function with -multiple comparisons for duplicate keywords. It is up to you to completely -disambiguate the keywords by modifying the generated C code. However, -<CODE>gperf</CODE> helps you out by organizing the output. - -Using this option usually means that the generated hash function is no -longer perfect. On the other hand, it permits <CODE>gperf</CODE> to work on -keyword sets that it otherwise could not handle. - -<DT><SAMP>‘-m <VAR>iterations</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--multiple-iterations=<VAR>iterations</VAR>’</SAMP> -<DD> -Perform multiple choices of the <SAMP>‘-i’</SAMP> and <SAMP>‘-j’</SAMP> values, and -choose the best results. This increases the running time by a factor of -<VAR>iterations</VAR> but does a good job minimizing the generated table size. - -<DT><SAMP>‘-i <VAR>initial-value</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--initial-asso=<VAR>initial-value</VAR>’</SAMP> -<DD> -Provides an initial <VAR>value</VAR> for the associate values array. Default -is 0. Increasing the initial value helps inflate the final table size, -possibly leading to more time efficient keyword lookups. Note that this -option is not particularly useful when <SAMP>‘-S’</SAMP> (or, equivalently, -<SAMP>‘%switch’</SAMP>) is used. Also, -<SAMP>‘-i’</SAMP> is overridden when the <SAMP>‘-r’</SAMP> option is used. - -<DT><SAMP>‘-j <VAR>jump-value</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--jump=<VAR>jump-value</VAR>’</SAMP> -<DD> -<A NAME="IDX48"></A> -Affects the “jump value”, i.e., how far to advance the associated -byte value upon collisions. <VAR>Jump-value</VAR> is rounded up to an -odd number, the default is 5. If the <VAR>jump-value</VAR> is 0 <CODE>gperf</CODE> -jumps by random amounts. - -<DT><SAMP>‘-n’</SAMP> -<DD> -<DT><SAMP>‘--no-strlen’</SAMP> -<DD> -Instructs the generator not to include the length of a keyword when -computing its hash value. This may save a few assembly instructions in -the generated lookup table. - -<DT><SAMP>‘-r’</SAMP> -<DD> -<DT><SAMP>‘--random’</SAMP> -<DD> -Utilizes randomness to initialize the associated values table. This -frequently generates solutions faster than using deterministic -initialization (which starts all associated values at 0). Furthermore, -using the randomization option generally increases the size of the -table. - -<DT><SAMP>‘-s <VAR>size-multiple</VAR>’</SAMP> -<DD> -<DT><SAMP>‘--size-multiple=<VAR>size-multiple</VAR>’</SAMP> -<DD> -Affects the size of the generated hash table. The numeric argument for -this option indicates “how many times larger or smaller” the maximum -associated value range should be, in relationship to the number of keywords. -It can be written as an integer, a floating-point number or a fraction. -For example, a value of 3 means “allow the maximum associated value to be -about 3 times larger than the number of input keywords”. -Conversely, a value of 1/3 means “allow the maximum associated value to -be about 3 times smaller than the number of input keywords”. Values -smaller than 1 are useful for limiting the overall size of the generated hash -table, though the option <SAMP>‘-m’</SAMP> is better at this purpose. - -If `generate switch' option <SAMP>‘-S’</SAMP> (or, equivalently, <SAMP>‘%switch’</SAMP>) is -<EM>not</EM> enabled, the maximum -associated value influences the static array table size, and a larger -table should decrease the time required for an unsuccessful search, at -the expense of extra table space. - -The default value is 1, thus the default maximum associated value about -the same size as the number of keywords (for efficiency, the maximum -associated value is always rounded up to a power of 2). The actual -table size may vary somewhat, since this technique is essentially a -heuristic. -</DL> - - - -<H2><A NAME="SEC23" HREF="gperf_toc.html#TOC23">5.6 Informative Output</A></H2> - -<DL COMPACT> - -<DT><SAMP>‘-h’</SAMP> -<DD> -<DT><SAMP>‘--help’</SAMP> -<DD> -Prints a short summary on the meaning of each program option. Aborts -further program execution. - -<DT><SAMP>‘-v’</SAMP> -<DD> -<DT><SAMP>‘--version’</SAMP> -<DD> -Prints out the current version number. - -<DT><SAMP>‘-d’</SAMP> -<DD> -<DT><SAMP>‘--debug’</SAMP> -<DD> -Enables the debugging option. This produces verbose diagnostics to -“standard error” when <CODE>gperf</CODE> is executing. It is useful both for -maintaining the program and for determining whether a given set of -options is actually speeding up the search for a solution. Some useful -information is dumped at the end of the program when the <SAMP>‘-d’</SAMP> -option is enabled. -</DL> - -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_5.html">previous</A>, <A HREF="gperf_7.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_7.html b/doc/gperf_7.html deleted file mode 100644 index af5edf8..0000000 --- a/doc/gperf_7.html +++ /dev/null @@ -1,57 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 6 Known Bugs and Limitations with gperf</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_6.html">previous</A>, <A HREF="gperf_8.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC24" HREF="gperf_toc.html#TOC24">6 Known Bugs and Limitations with <CODE>gperf</CODE></A></H1> - -<P> -The following are some limitations with the current release of -<CODE>gperf</CODE>: - -</P> - -<UL> -<LI> - -The <CODE>gperf</CODE> utility is tuned to execute quickly, and works quickly -for small to medium size data sets (around 1000 keywords). It is -extremely useful for maintaining perfect hash functions for compiler -keyword sets. Several recent enhancements now enable <CODE>gperf</CODE> to -work efficiently on much larger keyword sets (over 15,000 keywords). -When processing large keyword sets it helps greatly to have over 8 megs -of RAM. - -<LI> - -The size of the generate static keyword array can get <EM>extremely</EM> -large if the input keyword file is large or if the keywords are quite -similar. This tends to slow down the compilation of the generated C -code, and <EM>greatly</EM> inflates the object code size. If this -situation occurs, consider using the <SAMP>‘-S’</SAMP> option to reduce data -size, potentially increasing keyword recognition time a negligible -amount. Since many C compilers cannot correctly generate code for -large switch statements it is important to qualify the <VAR>-S</VAR> option -with an appropriate numerical argument that controls the number of -switch statements generated. - -<LI> - -The maximum number of selected byte positions has an -arbitrary limit of 255. This restriction should be removed, and if -anyone considers this a problem write me and let me know so I can remove -the constraint. -</UL> - -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_6.html">previous</A>, <A HREF="gperf_8.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_8.html b/doc/gperf_8.html deleted file mode 100644 index fecdb26..0000000 --- a/doc/gperf_8.html +++ /dev/null @@ -1,46 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 7 Things Still Left to Do</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_7.html">previous</A>, <A HREF="gperf_9.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC25" HREF="gperf_toc.html#TOC25">7 Things Still Left to Do</A></H1> - -<P> -It should be “relatively” easy to replace the current perfect hash -function algorithm with a more exhaustive approach; the perfect hash -module is essential independent from other program modules. Additional -worthwhile improvements include: - -</P> - -<UL> -<LI> - -Another useful extension involves modifying the program to generate -“minimal” perfect hash functions (under certain circumstances, the -current version can be rather extravagant in the generated table size). -This is mostly of theoretical interest, since a sparse table -often produces faster lookups, and use of the <SAMP>‘-S’</SAMP> <CODE>switch</CODE> -option can minimize the data size, at the expense of slightly longer -lookups (note that the gcc compiler generally produces good code for -<CODE>switch</CODE> statements, reducing the need for more complex schemes). - -<LI> - -In addition to improving the algorithm, it would also be useful to -generate an Ada package as the code output, in addition to the current -C and C++ routines. -</UL> - -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_7.html">previous</A>, <A HREF="gperf_9.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_9.html b/doc/gperf_9.html deleted file mode 100644 index 4664479..0000000 --- a/doc/gperf_9.html +++ /dev/null @@ -1,96 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - 8 Bibliography</TITLE> -</HEAD> -<BODY> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_8.html">previous</A>, <A HREF="gperf_10.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -<P><HR><P> - - -<H1><A NAME="SEC26" HREF="gperf_toc.html#TOC26">8 Bibliography</A></H1> - -<P> -[1] Chang, C.C.: <I>A Scheme for Constructing Ordered Minimal Perfect -Hashing Functions</I> Information Sciences 39(1986), 187-195. - -</P> -<P> -[2] Cichelli, Richard J. <I>Author's Response to “On Cichelli's Minimal Perfect Hash -Functions Method”</I> Communications of the ACM, 23, 12(December 1980), 729. - -</P> -<P> -[3] Cichelli, Richard J. <I>Minimal Perfect Hash Functions Made Simple</I> -Communications of the ACM, 23, 1(January 1980), 17-19. - -</P> -<P> -[4] Cook, C. R. and Oldehoeft, R.R. <I>A Letter Oriented Minimal -Perfect Hashing Function</I> SIGPLAN Notices, 17, 9(September 1982), 18-27. - -</P> -<P> -[5] Cormack, G. V. and Horspool, R. N. S. and Kaiserwerth, M. -<I>Practical Perfect Hashing</I> Computer Journal, 28, 1(January 1985), 54-58. - -</P> -<P> -[6] Jaeschke, G. <I>Reciprocal Hashing: A Method for Generating Minimal -Perfect Hashing Functions</I> Communications of the ACM, 24, 12(December -1981), 829-833. - -</P> -<P> -[7] Jaeschke, G. and Osterburg, G. <I>On Cichelli's Minimal Perfect -Hash Functions Method</I> Communications of the ACM, 23, 12(December 1980), -728-729. - -</P> -<P> -[8] Sager, Thomas J. <I>A Polynomial Time Generator for Minimal Perfect -Hash Functions</I> Communications of the ACM, 28, 5(December 1985), 523-532 - -</P> -<P> -[9] Schmidt, Douglas C. <I>GPERF: A Perfect Hash Function Generator</I> -Second USENIX C++ Conference Proceedings, April 1990. - -</P> -<P> -[10] Schmidt, Douglas C. <I>GPERF: A Perfect Hash Function Generator</I> -C++ Report, SIGS 10 10 (November/December 1998). - -</P> -<P> -[11] Sebesta, R.W. and Taylor, M.A. <I>Minimal Perfect Hash Functions -for Reserved Word Lists</I> SIGPLAN Notices, 20, 12(September 1985), 47-53. - -</P> -<P> -[12] Sprugnoli, R. <I>Perfect Hashing Functions: A Single Probe -Retrieving Method for Static Sets</I> Communications of the ACM, 20 -11(November 1977), 841-850. - -</P> -<P> -[13] Stallman, Richard M. <I>Using and Porting GNU CC</I> Free Software Foundation, -1988. - -</P> -<P> -[14] Stroustrup, Bjarne <I>The C++ Programming Language.</I> Addison-Wesley, 1986. - -</P> -<P> -[15] Tiemann, Michael D. <I>User's Guide to GNU C++</I> Free Software -Foundation, 1989. - -</P> -<P><HR><P> -Go to the <A HREF="gperf_1.html">first</A>, <A HREF="gperf_8.html">previous</A>, <A HREF="gperf_10.html">next</A>, <A HREF="gperf_10.html">last</A> section, <A HREF="gperf_toc.html">table of contents</A>. -</BODY> -</HTML> diff --git a/doc/gperf_toc.html b/doc/gperf_toc.html deleted file mode 100644 index 3f09a68..0000000 --- a/doc/gperf_toc.html +++ /dev/null @@ -1,59 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52b - from gperf.texi on 20 December 2009 --> - -<META HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8"> -<TITLE>Perfect Hash Function Generator - Table of Contents</TITLE> -</HEAD> -<BODY> -<H1>User's Guide to <CODE>gperf</CODE> 3.1</H1> -<H2>The GNU Perfect Hash Function Generator</H2> -<H2>Edition 3.1, 20 December 2009</H2> -<ADDRESS>Douglas C. Schmidt</ADDRESS> -<ADDRESS>Bruno Haible</ADDRESS> -<P> -<P><HR><P> -<UL> -<LI><A NAME="TOC1" HREF="gperf_1.html#SEC1">GNU GENERAL PUBLIC LICENSE</A> -<LI><A NAME="TOC2" HREF="gperf_2.html#SEC2">Contributors to GNU <CODE>gperf</CODE> Utility</A> -<LI><A NAME="TOC3" HREF="gperf_3.html#SEC3">2 Introduction</A> -<LI><A NAME="TOC4" HREF="gperf_4.html#SEC4">3 Static search structures and GNU <CODE>gperf</CODE></A> -<LI><A NAME="TOC5" HREF="gperf_5.html#SEC5">4 High-Level Description of GNU <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC6" HREF="gperf_5.html#SEC6">4.1 Input Format to <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC7" HREF="gperf_5.html#SEC7">4.1.1 Declarations</A> -<UL> -<LI><A NAME="TOC8" HREF="gperf_5.html#SEC8">4.1.1.1 User-supplied <CODE>struct</CODE></A> -<LI><A NAME="TOC9" HREF="gperf_5.html#SEC9">4.1.1.2 Gperf Declarations</A> -<LI><A NAME="TOC10" HREF="gperf_5.html#SEC10">4.1.1.3 C Code Inclusion</A> -</UL> -<LI><A NAME="TOC11" HREF="gperf_5.html#SEC11">4.1.2 Format for Keyword Entries</A> -<LI><A NAME="TOC12" HREF="gperf_5.html#SEC12">4.1.3 Including Additional C Functions</A> -<LI><A NAME="TOC13" HREF="gperf_5.html#SEC13">4.1.4 Where to place directives for GNU <CODE>indent</CODE>.</A> -</UL> -<LI><A NAME="TOC14" HREF="gperf_5.html#SEC14">4.2 Output Format for Generated C Code with <CODE>gperf</CODE></A> -<LI><A NAME="TOC15" HREF="gperf_5.html#SEC15">4.3 Use of NUL bytes</A> -<LI><A NAME="TOC16" HREF="gperf_5.html#SEC16">4.4 The Copyright of the Output</A> -</UL> -<LI><A NAME="TOC17" HREF="gperf_6.html#SEC17">5 Invoking <CODE>gperf</CODE></A> -<UL> -<LI><A NAME="TOC18" HREF="gperf_6.html#SEC18">5.1 Specifying the Location of the Output File</A> -<LI><A NAME="TOC19" HREF="gperf_6.html#SEC19">5.2 Options that affect Interpretation of the Input File</A> -<LI><A NAME="TOC20" HREF="gperf_6.html#SEC20">5.3 Options to specify the Language for the Output Code</A> -<LI><A NAME="TOC21" HREF="gperf_6.html#SEC21">5.4 Options for fine tuning Details in the Output Code</A> -<LI><A NAME="TOC22" HREF="gperf_6.html#SEC22">5.5 Options for changing the Algorithms employed by <CODE>gperf</CODE></A> -<LI><A NAME="TOC23" HREF="gperf_6.html#SEC23">5.6 Informative Output</A> -</UL> -<LI><A NAME="TOC24" HREF="gperf_7.html#SEC24">6 Known Bugs and Limitations with <CODE>gperf</CODE></A> -<LI><A NAME="TOC25" HREF="gperf_8.html#SEC25">7 Things Still Left to Do</A> -<LI><A NAME="TOC26" HREF="gperf_9.html#SEC26">8 Bibliography</A> -<LI><A NAME="TOC27" HREF="gperf_10.html#SEC27">Concept Index</A> -</UL> -<P><HR><P> -This document was generated on 20 December 2009 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52b.</P> -</BODY> -</HTML> |